选择所有子字符串,我们可以选择非空并且所有字符都相同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择所有子字符串,我们可以选择非空并且所有字符都相同相关的知识,希望对你有一定的参考价值。

给定一个字符串S,返回一个整数,该整数表示我们可以选择S的非空子字符串(其中子字符串的所有字符都相同)的方式的数目。

例如“ zzzyz”应该返回7

“ z”的4个实例1个实例“ zz”1个“ zzz”实例“ y”的1个实例]

我正在考虑遍历所有可能的组合,并且只将所有具有all()=的组合返回到True

def solution(string):
   lst = []
   for i in string:
       for ii in string[1:]:
           lst.append((i,ii))

   return len([i for i in lst if all(i)])
答案

您应该使用外部for循环来获取子字符串的长度-1,2,3,...-和内部for循环来创建具有此长度的所有子字符串。

all()不能按预期工作。它不检查元素是否相同,但是是否所有元素都为True给出bool(element)-并且所有非空字符串都给出True

您可以使用set()检查所有元素是否相同-对于相同的元素set()的长度为1

def solution(string):
    lst = []

    for length in range(1, len(string)+1):
        #print('length:', length)
        for x in range(0, len(string)-length+1):
            substring = string[x:x+length]
            #print(substring, len(set(substring)))
            if len(set(substring)) == 1:
                lst.append(substring)

    return len(lst)

print(solution('zzzyz'))
另一答案

是的,这是一个面试问题,我第一次没有得到,但是第二次我得到了,这是我得到的:

# input string 
S = "zzzyz"

# We want to emulate this logic
# loop 1    loop2
# z         (zzyz)
# z         (zyz)
# z         (yz)
# y         (z)
# z         ()


equal_substrings = 0

# iterate through all chars
for n, s in enumerate(S):
     # each char gets += 1
     equal_substrings += 1
     # 2nd loop: iterate through remaining chars
     for ss in S[n+1:]:
          # if this char = last char, += 1
          # else break
          if ss == s:
               equal_substrings += 1
          else:
               break

以上是关于选择所有子字符串,我们可以选择非空并且所有字符都相同的主要内容,如果未能解决你的问题,请参考以下文章

Python数据框-如何选择名称中包含特定子字符串的所有列[重复]

696. 计数二进制子串

使用 Panache 选择字符串包含子字符串的位置

最大子序和

动态规划:字符串匹配

LeetCode 696. 计数二进制子串 [Count Binary Substrings (Easy)]