写一段代码来打印输入字符串中最长的字母子序列。 -首先,要求用户输入任何字符串。 -您的代码应该打印输入字符串中最长的子字符串,它只包含英文字母表中的字母,包括大小写字母。你知道吗
如果有多个子序列具有相同的最长长度,则代码返回第一个子序列。
如果input\u str不包含任何字母,则函数返回空字符串。
例如
对于输入字符串“ab24[AaBbCDExy0longest]”,它应该打印“AaBbCDExy”。
对于输入字符串'a a1234b | c | d',它应该打印'a'。
对于输入字符串“12345”,应打印“”(空字符串)。
尝试了以下代码,但没有成功:
# Your code here
#longest_letterSeq = ''
def longestSubstring(s):
longest_letterSeq = ''
i = 0
while(i<len(s)):
curr_letterSeq = ''
# For letter substring
while(i<len(s) and s[i].isalpha()):
curr_letterSeq += s[i]
i+= 1
# Case handling if the character is not letter
if(i< len(s) and not(s[i].isalpha())) :
i+= 1
if(len(curr_letterSeq) > len(longest_letterSeq) ):
longest_letterSeq = curr_letterSeq
return longest_letterSeq
str = input("Please input your string here: ")
print(longestSubstring(str))
有人能帮助编辑或更正代码吗?你知道吗
一个选项是将
re.findall
与max
一起使用:考虑没有匹配的情况的小技巧:
尽管我建议你采用更具可读性的方法:
或者正如@deepstop对条件表达式的建议:
另一种方法是用空格替换所有非字母,拆分,然后选择最长的字符串。你知道吗
和yatu一样,我对这个问题的第一个想法是regex。然而,我提供了一个解决方案的基础上,你的方法。代码中的问题是,只有当字符是alpha时才增加i。因此对于字符串
abc123
,您将增加i 3倍。但是由于下一个字符不是alpha,所以你不需要增加i,这意味着i现在被固定在一个值3上,它小于字符串6的长度。所以你的函数陷入了一个无限循环,因为你停止增加i代码的简化版本可以编写如下。基本上不需要第二个while循环。实际上根本不需要while循环,您可以使用for循环来迭代字符串中的每个字符
输出
相关问题 更多 >
编程相关推荐