返回存在两个相同字符的次数



定义一个函数immPairs(..),该函数接收一个字符串,并返回字符串中两个相同字符紧接在另一个后面的次数。如果有两个以上的相同字符一个接一个地出现,则应计算所有立即数对。

例如:

immPairs(“abxxab88ef”) 

应该返回2,因为有两个立即数对"xx"one_answers"88"

immPairs(“abxxxab88ef”)

应该返回3,因为有三个立即数对"xx"、"xx"one_answers"88"

例如,以下代码片段:

print immPairs("abxxab88ef")

应产生输出:2

这就是我所拥有的,我走对了吗?如果是这样的话,我不知道该用什么合适的"如果"语句。

def immPairs(st):
   count = 0
   l = list(st)
   for char in l:
     if char == char:
        count = count + 1
  return count
print immPairs("abxxab88ef")

您可以编写:

def immPairs(st):
    count = 0
    for i in range(len(st) - 1):
        if st[i] == st[i + 1]:
            count += 1
    return count

这通过检查每个位置ii + 1来遍历字符串,以查看它们是否相等。如果是,那么你就找到了一双。这意味着您只需要在最后一个字符之前检查i,因为最后一对是由字符串的最后两个字符组成的。

这似乎适用于单行解决方案:

In [1]: s = 'abxxxab88ef'
In [2]: sum((s[i]==s[i-1] for i in range(1,len(s)-1)))
Out[2]: 3

(在迭代除第一个字符外的所有字符的生成器中,计算一个字符与其前一个字符相同的次数)。

您发布的代码的主要错误是char == char始终是True。还要注意,字符串是可迭代的,因此不需要将str转换为list。要按自己的方式进行,可以使用enumerate:

def immPairs(st):
   count = 0
   for i, char in enumerate(st[1:]):
     if char == st[i]:
        count = count + 1
   return count
print immPairs("abxxab88ef")

这里,enumerate生成对(0, 'b')(1, 'x')等,因此索引i实际上是字符串中前一个字符的索引。

相关内容

  • 没有找到相关文章

最新更新