在这里,我想在字符串中查找所有可能的回文。
回文的含义:-一个单词,词组或序列,其向后读与向前读相同,
例如夫人或修女。
所以我拿了一个琴弦。将其拆分为列表。然后一次获取列表中的每个元素。然后将所有元素组合到列表的最后一个元素。
a=str(input("enter the string:-"))
b=a.split()
for i in range(len(b)):
for j in range(i+1,len(b)):
t=b[i:j]
r=t.reverse()
if t == r:
print(t)
即使我尽可能写逻辑代码,也无法获得任何输出
例如:-
如果a="Rotator"
输出:-
tat
otato
,如果可能的话,还有很多。
我找不到错误的地方或漏洞。
答案 0 :(得分:0)
程序有两个缺陷:
reversed
获得新的值,固定程序
a=str(input("enter the string:-"))
for i in range(len(a)):
for j in range(i+1,len(a)):
t=a[i:j]
r=''.join(reversed(t))
if t == r:
print(t)
输出:
R
o
otato
t
tat
a
t
o
答案 1 :(得分:0)
首先,无需将字符串转换为字符列表
在这里,您尝试将字符串转换为字符列表,但是在sting上使用split方法将无法提供所需的字符列表。为此,您必须list(s)
。最好的方法是String Slicing
。
以下代码段将为您提供确切的想法。
def isPall(s):
return s[::-1]==s
s=str(input("enter the string:-"))
for i in range(1, len(s)+1):
start = 0
end = i
while end<len(s)+1:
if isPall(s[start:end]):
print(s[start:end])
start+=1
end+=1
在提供字符串madam
时,输出如下:
m
a
d
a
m
ada
madam
答案 2 :(得分:0)
恭喜您正确地制定了用于回文的中央逻辑(两个具有适当条件的循环)。
由于您要我们发现错误,所以我认为我可以发现两个错误。 首先
b=a.split()
我想,也许您打算制作一个列表,其中所有字符都分开,一次一个字符。但是split()将寻找一个分隔符,在您的情况下为None。根据官方文档“如果未指定sep或为None,则将应用其他拆分算法”。该算法不符合您的要求。
如果您只想将字符串中的字符分成一个列表,则只需执行以下操作即可。
b=list(a)
第二个问题:您的代码中发生的事情是b是具有单个成员的列表(字符串本身)。在定义b之后,可以通过键入以下行来检查它。
print(b,len(b))
这意味着b的长度为1。反过来,这意味着执行进入第一个循环,但没有进入第二个循环,因为条件是range(1,1),这意味着一个空列表!
我对您的代码做了一些小的更改,并进行了检查。看起来它正在提供您想要的结果。
a=str(input("enter the string:-"))
b=list(a)
for StartSlice in range(len(b)):
for EndSlice in range(StartSlice,len(b)+1,1):
ForwardString = "".join(b[StartSlice:EndSlice])
if ForwardString==ForwardString[::-1] and len(ForwardString)>1:
print(ForwardString)
当我为嵌入回文“ rotator”的'xyzrotatorabc'运行以上代码时,得到以下输出。
enter the string:-xyzrotatorabc
rotator
otato
tat
我不确定(对于您所要解决的问题)是否有帮助。
答案 3 :(得分:0)
要记住的两个基本假设:
(1)1个字符字符串/子字符串不被视为回文,(2)您只想计算唯一的子字符串(原始输入字符串已经是唯一的)
def count_palindrome_substrings(string):
# substrings set can only contain UNIQUE values
substrings = set()
for i in range(len(string)):
for j in range(i + 1, len(string) + 1):
sub = ''.join(string[i:j])
# is sub a palindrome and is its length greater than 1
if str(sub) == str(sub)[::-1] and len(sub) > 1:
substrings.add(sub)
return len(substrings)