LeetCode第五题
题目描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
思路:
目前仅想出一种初级的算法。采用双下标从字符串的左右两头夹击,比较其值是否相等,若相等,则计数值加二(当两下标不等)或加一(当两下标相等),否则左下标退回本次循化初始值,右下标为上次循环初始值减一,并且计数值清零,直到左下标大于等于右下标,则本次循环结束。再令左下标为上次循环初始值加一,右下标依然从最右开始。每次内循环结束后得到计数值,取计数值最大的那个的子字符串的开始指针返回即可。
源代码:
char * longestPalindrome(char * s){
char *maxpoint = s;
int max = 0;
int len = 0;
int i = 0;
while(s[i]){
++len;
++i;
}
int j = len - 1;
for(i = 0;i < len;++i){
int cnt = 0;
int begin = i;
j = len - 1;
int end = j;
while(begin <= end){
if(s[begin] == s[end]){
if(begin < end){
cnt += 2;
++begin;
--end;
}
else{
++cnt;
++begin;
--end;
}
}
else{
end = --j;
cnt = 0;
begin = i;
}
}
if(cnt > max){
max = cnt;
maxpoint = &s[i];
}
}
maxpoint[max] = '\0';
return maxpoint;
}
空间复杂度为常数,时间复杂度为平方级。
网友评论