选择所有可以选择非空且所有字符都相同的子字符串

2024-09-26 22:53:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,“zzzyz”应该返回7

“z”的4个实例 “zz”的1个实例 “zzz”的1个实例 “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)])

Tags: 实例字符串inforstring方式整数all
2条回答

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

all()没有像您预期的那样工作。它不检查元素是否相同,但检查所有元素是否为bool(element)给出True,并且所有非空字符串都给出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

相关问题 更多 >

    热门问题