L2-008. 最长对称子串
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11
思路:先将原字符串倒着拷贝下来,然后逐个比较是否相等,注意剪枝否则会超时,然后还是就是输出最小值为1这是一个测试点。下面再提供一个测试点
输入样例: aaa 输出样例: 3
#include<string> #include<iostream> using namespace std; int main() { string str, cstr=""; getline(cin, str); for (int i = str.length() - 1; i >= 0; i--) cstr += str[i]; unsigned max = 1; //最小值为1 for (unsigned i = 0; i < cstr.length(); i++){ if (cstr.length() - i <= max)break; //剪枝 for (unsigned j = 0; j < str.length(); j++){ if (str.length() - j <= max)break; //剪枝 if (cstr[i] == str[j]){ int k = 0; do{ if (i + k >= cstr.length())break; if (j + k >= str.length())break; k++; } while (cstr[i + k] == str[j + k]); // for (k = 0; cstr[i + k] == str[j + k]; k++); 这个就是原先过不去的语句 if (k>max)max = k; } } } cout << max << endl; return 0; }