【问题标题】:How do I count the pairs next to one another while using the last and next letter as a possible pair如何在使用最后一个字母和下一个字母作为可能的一对时计算彼此相邻的对
【发布时间】:2018-05-29 16:07:32
【问题描述】:

这是我的代码。

def count_pairs( s ):
  paired = 0
  unpaired = set(s)
  print unpaired
  for x in unpaired:
    paired = paired + s.count (x + x)
  return paired


print ( count_pairs("ddogccatppig") )
print ( count_pairs("dogcatpig") )
print ( count_pairs("xxyyzz") )
print ( count_pairs("a") )
print ( count_pairs("abc") )
print ( count_pairs("aabb") )
print ( count_pairs("dogcatpigaabbcc") )
print ( count_pairs("aabbccdogcatpig") )
print ( count_pairs("dogabbcccatpig") )
print ( count_pairs("aaaa") )
print ( count_pairs("AAAAAAAAA") )

我希望能够在不使用 set 命令的情况下获取对,同时计算 count_pairs 中的最后一个字母和下一个。

【问题讨论】:

  • 你使用一个字符串的最后一个字母和下一个字符串的第一个字母吗? (所以 ddogccatppigdogcatpig... 等等)
  • 期望的输出是什么?还请澄清您的问题。

标签: python string counter


【解决方案1】:

您正在寻找不重叠个重复字母的计数,这是str.count 返回的结果。您可以通过while 循环复制此内容,以避免setstr.count

def count_pairs(s):
    c = 0
    i = 0
    while i < len(s)-1:
        if s[i] == s[i+1]:
            c += 1
            i += 2
        else:
            i += 1
    return c

【讨论】:

    【解决方案2】:

    递归解决方案

    def count_pairs (s):
      def loop (pairs, x, y = None, *rest):
        if y is None:
          return pairs
        elif x == y:
          return loop (pairs + 1, y, *rest)
        else:
          return loop (pairs, y, *rest)
      return loop (0, *s)
    
    print (count_pairs ("ddogccatppig"))    # 3
    print (count_pairs ("dogcatpig"))       # 0
    print (count_pairs ("xxyyzz"))          # 3 
    print (count_pairs ("a"))               # 0
    print (count_pairs ("abc"))             # 0
    print (count_pairs ("aabb"))            # 2
    print (count_pairs ("dogcatpigaabbcc")) # 3
    print (count_pairs ("aabbccdogcatpig")) # 3
    print (count_pairs ("dogabbcccatpig"))  # 3
    print (count_pairs ("aaaa"))            # 3
    print (count_pairs ("AAAAAAAAA"))       # 8
    

    在上面,字符串 aaaa 导致 3 对,因为 [aa]aaa[aa]aaa[aa],其中 [..] 表示找到的对。如果您不想计算重叠对,loop 需要稍微更改

    def count_pairs (s):
      def loop (pairs, x = None, y = None, *rest):
        if x is None or y is None:
          return pairs
        elif x == y:
          return loop (pairs + 1, y, *rest)
          return loop (pairs + 1, *rest)
        else:
          return loop (pairs, y, *rest)
      return loop (0, *s)
    
    print (count_pairs ("ddogccatppig"))    # 3
    print (count_pairs ("dogcatpig"))       # 0
    print (count_pairs ("xxyyzz"))          # 3 
    print (count_pairs ("a"))               # 0
    print (count_pairs ("abc"))             # 0
    print (count_pairs ("aabb"))            # 2
    print (count_pairs ("dogcatpigaabbcc")) # 3
    print (count_pairs ("aabbccdogcatpig")) # 3
    print (count_pairs ("dogabbcccatpig"))  # 2
    print (count_pairs ("aaaa"))            # 2
    print (count_pairs ("AAAAAAAAA"))       # 4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 2019-03-09
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2020-01-16
      • 2018-07-21
      相关资源
      最近更新 更多