计算字符串中的所有回文子字符串

2024-06-07 02:55:17 发布

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

在这里,我想找出字符串中所有可能的回文。你知道吗

回文含义:-a前后读相同的单词、短语或顺序

例如,夫人或修女。你知道吗

所以我拿了根绳子。把它分成一个列表。然后一次获取列表中的每个元素。然后对所有元素进行组合,直到列表的最后一个元素。你知道吗

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

如果可能的话还有很多。你知道吗

我找不到哪里出错了,也找不到哪里有漏洞。你知道吗


Tags: 字符串in元素列表forinputlen顺序
3条回答

恭喜你把中心逻辑弄对了(有适当条件的两个for循环)得到了回文。你知道吗

既然你要我们找出错误,我想我能找出两个错误。 第一

b=a.split()

我想,也许,你打算把所有字符分开,一次一个字符。但是,split()将查找分隔符,在您的情况下,它是None。根据官方文件“如果sep未指定或无,则采用不同的分割算法”。那个算法不符合你的要求。你知道吗

如果您只想将字符串中的字符分隔成一个列表,那么只需执行以下操作即可。你知道吗

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

我不确定我是否有什么帮助(对于你要求的问题)。你知道吗

程序有两个缺陷:

  • 分道扬镳不是你想要的。实际上不需要拆分为一个列表,您可以对一个字符串执行所有操作
  • 反向是一种就地反向如果您想获得一个新值,请使用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

首先,不需要将字符串转换为字符列表 在这里,您试图将字符串转换为字符列表,但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

相关问题 更多 >