【问题标题】:Removing consecutive duplicates in a string [duplicate]删除字符串中的连续重复项[重复]
【发布时间】:2019-08-10 01:58:29
【问题描述】:

我正在尝试从我的代码中删除重复项,但是当此代码遇到某些情况时,它会失败并出现“字符串索引超出范围”错误。

例如,i/p - tadayutaysgcgtttggytytyyyikk o/p - tadayutaysgcgtgytytyik

def removeDups(str):
    smallOut = ''

    if len(str) == 1 or len(str) == 0:
        return str

    if str[0] == str[1]:
        smallOut = removeDups(str[2:])
        if str[1] == smallOut[0]:
            return smallOut
        else:
            return str[1] + smallOut
    else:
        smallOut = removeDups(str[1:])
        return str[0] + smallOut

string = input().strip()
print(removeDups(string))

i/p - tadayutaysgcgtttggytytyyyikk o/p - tadayutaysgcgtgytytyik

【问题讨论】:

    标签: python string


    【解决方案1】:

    要删除重复项,您可以使用re 模块:

    import re
    
    s = 'tadayutaysgcgtttggytytyyyikk'
    
    print( re.sub(r'(.)\1+', r'\1', s) )
    

    打印:

    tadayutaysgcgtgytytyik
    

    或者:不使用re,使用itertools.groupby

    from itertools import groupby
    
    s = 'tadayutaysgcgtttggytytyyyikk'
    
    print(''.join(v for v, _ in groupby(s)))
    

    打印:

    tadayutaysgcgtgytytyik
    

    【讨论】:

      【解决方案2】:
      I use a standard approach for removing consecutive duplicates. For each character, keep incrementing the pointer till the current and the next are same.
      ans = ""
      
      s = 'tadayutaysgcgtttggytytyyyikk'
      i=0
      while i<len(s):
          cnt = 1
          ans = ans+s[i]
          while i+1<len(s) and s[i]==s[i+1]:
              i+=1
          i+=1
      
      ans
      

      【讨论】:

      • 您的帖子当前是flagged as low-quality。添加关于您的代码如何解决问题的解释可以提高其质量,不仅对 OP,对其他读者也是如此。
      猜你喜欢
      • 2018-08-05
      • 2016-07-31
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      相关资源
      最近更新 更多