最长回文串

 
回文就是中心对称的单词。从字符的中心开始,向两边扩散检查回文。
这需要维护一个指针,从头开始,以每一个位置为中心遍历一遍。
这比暴力遍历所有子串省了很多重复判断。
以某个字符为核心一旦探测到边界,更长的的串就都不再考虑。
复杂度O(n^2)。注意,回文需要同时检查单核`aba`以及双核`abba`的情况。
代码:
res = ""
maxs = 0
def findHuiwen(newstr):
    if newstr == None or len(newstr) == 0:
        return ""
    if len(newstr) == 1:
        return newstr
    for i in range(len(newstr) - 1):
        checkSame(newstr,i,i)
        checkSame(newstr,i,i+1)
    return res

def checkSame(newstr,start,end):
    global maxs
    global res
    while start >=0 and end < len(newstr):
        if newstr[start] == newstr[end]:
            max = end - start + 1
            if max > maxs:
                maxs = max
                res = newstr[start:end+1]

            start -= 1
            end += 1

        else:
            return

res = findHuiwen("c")
print(res)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值