如何解决计算文本文件的所有长度≥ 7 的回文子串
编写一个程序,给出一个长字符串(比如 1.000.000 个字符的顺序),计算所有长度≥7 的回文子串,即向前和向后拼写相同的子串。您可以使用以下代码将文件中的完整文本读取为字符串,将其转换为小写,并删除除字母和数字以外的所有内容。文件 saxo.txt 是 http://www.gutenberg.org/cache/epub/1150/pg1150.txt
的本地副本from string import ascii_letters,digits
s = open("The Danish History.txt").read()
s = s.lower()
s = "".join([c for c in s if c in ascii_letters or c in digits])
def isPalindrome(str):
def isPal(str):
if len(str) >= 7:
return True
else:
str[0] == str[-1] and isPal(str[1:-1])
return isPal(s)
print(isPalindrome(s))
我得到了这个练习,我必须计算一个文本文件的所有长度 ≥ 7 的回文子串。我已经使用上面的代码来表明我的字符串/文本文件是一个回文。我不知道我现在必须做什么来计算长度 ≥ 7 的所有回文子串的列表。
提前致谢。
解决方法
只要单词的长度大于或等于 7,您的函数就会返回 True
,无论它是回文。您可以检查字符串的反转版本是否与原始字符串相同:string[::-1] == string
就足够了。
在我看来,“回文子串”并不意味着回文单词。在这种情况下,您可能希望遍历所有子字符串,而不仅仅是被空格分割的单词。可能有更有效的方法来做到这一点,但以下是我的建议:
from string import ascii_letters,digits
with open('The Danish History.txt','r') as f:
s = f.read()
s = s.lower()
s = "".join([c for c in s if c in ascii_letters or c in digits])
palins = []
for length in range(7,len(s) + 1): # loop over possible lengths
for start in range(len(s) - length): # loop over starting positions
substring = s[start:start+length]
if substring[::-1] == substring: # if palindromic
palins.append(substring)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。