#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 200 + 5;
char str[maxn]; //字符串
int k; //增加字母数量
bool flag; //判断
int l; //最大长度
int main()
{
while(~scanf("%s", str))
{
int len = strlen(str); //计算字符串长度
scanf("%d", & k);
for(l = (len + k) / 2; l >= 1; l --) //从最大的长度的一半开始搜索(占总长的一半)
{
for(int i = 0; i < len; i ++) //枚举判断每个字母是否有符合要求的(一一对应相等)
{
flag = true;
for(int t = 0; t < l; t ++) //判断是否一(str[i]往后)一(str[i + l]往后)对应相等
{
if(str[i + t] == str[i + l + t] || (i + l + t >= len && i + l + t < len + k)) //后半个判断条件是如果字母下标超过了len(即到了字母随意区) 则后面的字母一定与前面相同(但要注意得小于最大长度)
continue;
else
{
flag = false;
break;
}
}
if(flag) //如果有一个符合要求的 直接跳出循环
goto END;
}
}
END:
printf("%d\n", 2 * l); //输出(2倍)
}
return 0;
}
题意:输入一串字符串。之后再输入一个k。表示后面可以随意接上k个字母。问最长的符合abcdabcd这种对应相等关系的子串的长度是多少。
题解:如上。