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