力扣打怪记004
题目相关
字符串
回文解法之中心扩展
题目链接
https://leetcode-cn.com/leetbook/read/array-and-string/conm7/
题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
示例 3:
输入:s = “a”
输出:“a”
心得:
1.看大佬的解法主要有:暴力,中心扩展,动态规划,这里在大佬基础上改了一些。
2.count的使用太精华了。
3.重新申请了一个字符数组,strncpy复制粘贴
好处是防止主函数的传入的是char* s=“baac”,
这种存储空间在文字常量区(全局),函数内无法修改数组的情况。
char *longestPalindrome(char *s)
{
if (strlen(s) == 0 || strlen(s) == 1)
return s;
int i, count , left, right,start=0,len=0;
for (i = 0; i < strlen(s); i += count)
{
left = i-1;
right = i+1;
count=1;//count就是来代替i+1
while (s[right] != '\0' && s[i] == s[right])
{
count++;//如果下一个相同就要判断让i多跳一,修改了记得归1
right++;
}
while (left >= 0 && s[right] != '\0' && s[left] == s[right])
{
left--;
right++;
}
if(len<right-left-1)
{
start=left+1;
len=right-start;
}
}
char* cpy=(char*)malloc(sizeof(char)*(len+1));
strncpy(cpy,s+start,len);
cpy[len]='\0';//记得字符串一定要有'\0'
return cpy;
}