题目
最长回文子串_牛客题霸_牛客网 (nowcoder.com)
Python
class Solution:
def getLongestPalindrome(self , A: str) -> int:
# write code here
le=len(A)
if A==A[::-1]:
return le
ans=0
for i in range(le-1):
for j in range(i+1,le):
if A[i:j]==A[i:j][::-1] and j-i>ans:
ans=j-i
return ans
C++
中心向左右扩散
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
int getLongestPalindrome(string A)
{
// write code here
int ans = 0, step;
for (int i = 0; i < A.size(); i += step) {
int left = i - 1, right = i + 1;
step = 1;
while (right < A.size() && A[i] == A[right])
{
right++;
step++;
}
while (left >= 0 && right < A.size() && A[left] == A[right])
{
right++;
left--;
}
ans = max(ans, right - left - 1);
}
return ans;
}
};
C语言
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
int getLongestPalindrome(char* A ) {
// write code here
int n = strlen(A);
int left,right;
int ans=0;
if(n==0)
return 0;
int step;
for(int i=0;i<n;i+=step)
{
left=i-1;
right=i+1;
step=1;
while(right < n &&A[right]==A[i])
{
right++;
step++;
}
while(left>=0 && right < n &&A[left]==A[right])
{
left--;
right++;
}
if(right-left-1>ans)
ans=right-left-1;
}
return ans;
}