题解 | #最长回文子串#
最长回文子串
https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
//将字符串分两类,奇数长度和偶数长度,再对两种类型分别从中间向两端遍历,找最长回文串 #include <stdio.h> #include<string.h> int main() { char arr[350]; scanf("%s", arr); int sz = strlen(arr); int mid = sz / 2, i = 1, num = 0, count = 0; //偶数型 for (i = 1; i <= mid+1; i++) { if ((arr[mid - i + 1] == arr[mid + i])&&((mid+i)<sz)) { count+=2; //记录最大的num num = num > count ? num : count; } else { //往左移 mid--; i = 0; count = 0; } } count = 0; mid = sz / 2; //偶数型 for (i = 1; i <= mid+1; i++) { if ((arr[mid - i + 1] == arr[mid + i])&&((mid+i)<sz)) { count+=2; num = num > count ? num : count; } else { //防止越界 if(mid<sz-1) { //往右移 mid++; } else { break; } i = 0; count = 0; } } count = 1; mid = sz / 2; //奇数型 for (i = 1; i <= mid; i++) { if (arr[mid - i] == arr[mid + i]) { count += 2; num = num > count ? num : count; } else { //往左移 mid--; i = 0; count = 1; } } count = 1; mid = sz / 2; for (i = 1; i <= mid; i++) { if (arr[mid - i] == arr[mid + i]) { count += 2; num = num > count ? num : count; } else { //防止越界 if(mid<sz-1) //往右移 mid++; } else { break; } i = 0; count = 1; } } printf("%d\n", num); return 0; }