解决方案1

while True:
    try:
        s = input()
        result = ""
        for i in range(len(s)):
            start = max(0, i-len(result)-1)
            temp = s[start: i+1]
            if temp == temp[::-1]:
                result = temp
            else:
                temp = temp[1:]
                if temp == temp[::-1]:
                    result = temp
        if result:
            print(len(result))
    except:
        break

  1. 回文性质1:
    如果是回文(abcba),则去除头尾(bcb)后也是回文 ---> s[1:-1]
  2. 回文性质2:
    如果长度为奇数(abcba),则以中间数为对称(c)
    如果长度为偶数(abccba),则以中线为对称点
  3. 所以当我们遍历s的时候:
    需要判断奇偶两种情况, str[start: i+1]

解决方案2

while True:
    try:
        s = input()
        m = 0
        for i in range(len(s)):
            if i - m >= 1 and s[i-m-1:i+1] == s[i-m-1:i+1][::-1]:
                m += 2
            elif i - m >= 0 and s[i-m:i+1] == s[i-m:i+1][::-1]:
                m += 1
        if m != 0:
            print(m)
    except:
        break

从头到尾扫描字符串,每增加一个新的字符,判断以这个字符结尾,且长度为m+1或m+2的子串是否为回文,
如果是,更新最大回文子串 ---> 中心扩散

  1. i- m >= 1: 防止发生数组越界
  2. 长度为m+1或m+2的子串: s[i-m-1:i+1] || s[i-m:i+1]