HJ85最长回文串
这个题目还挺奇怪的,主要是自己生成了一个bug,自己也没有意识到,但是代码运行起来产生了奇怪的结果自己就懵逼了
最后一版成功
#include <stdio.h>
int main() {
char strArray[351] = {'\0'};
while (scanf("%s", strArray) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
// printf("%s\n", strArray);
int len = strlen(strArray);
int max = 0;
int maxIndex = 0;
for(int i = 0; i < len; i++)
{
if(strArray[i] == 'c' && strArray[i+1] == 'c' && strArray[i+2] == 'c' && strArray[i+3] == 'c')
{
int h = 0;
}
int flag = !(i >= 1 && strArray[i - 1] == strArray[i + 1]);
if(i + 1 < len && strArray[i + 1] != strArray[i] && !(i >= 1 && strArray[i - 1] == strArray[i + 1]))
{
continue;
}
int count = 0;
int slow = 0;
int fast = 0;
if(i > 1 && i + 1 < len && strArray[i - 1] == strArray[i + 1])
{
slow = i;
fast = i;
int diff = 0;
while(slow >= 0 && fast < len && strArray[slow--] == strArray[fast++])
{
// if()
// {
// break;
// }
// slow--;
// fast++;
diff++;
}
count = 2 * (diff - 1) + 1;
}
if(i + 1 < len && strArray[i + 1] == strArray[i])
{
slow = i;
fast = i + 1;
int diff = 0;
while(slow >= 0 && fast < len && strArray[slow--] == strArray[fast++])
{
// if(strArray[slow] != strArray[fast])
// {
// break;
// }
// slow--;
// fast++;
diff++;
}
count = 2 * diff;
}
if(count > max)
{
max = count;
maxIndex = slow + 1;
}
}
strArray[maxIndex + max] = '\0';
printf("%d\n", max);
}
return 0;
}
这个题目也挺烦人的,现在得到你的经验就是像这种快慢指针计数字符串长度的,最后用一个变量单独计数。不要用fast和slow来计数。感觉很麻烦。