B4039 [GESP202409 三级] 回文拼接
欢迎报名洛谷网校,期待和大家一起进步!
:::align{center} :::
本题考察字符串和相关函数的使用。
题目问,每个字符串是否由两个长度至少为
可以枚举开头的字符串长度 substr,用法如下:
s.substr(pos,len):从下标pos开始,截取长度为len的字符串;s.substr(pos):从下标pos开始,截取到字符串末。
字符串相关的函数(如大小写转换、字符串搜索、分割、替换等)在 GESP 三级考纲内要求掌握,建议学习并且灵活运用。
下一个问题是判断回文。根据定义,回文字符串指的是从前往后读和从后往前读是一样的字符串。假设字符串
bool flag = true;
for (int j = 0; j < a.length(); j++) {
if (a[j] != a[a.length() - j - 1])
flag = false;
}
因此整个代码的参考流程可以写作:
for (int i = 2; i + 1 < s.length(); i++) {
//枚举开头的字符串长度 i
string a = s.substr(0, i);
string b = s.substr(i);
//判断 a 是否回文,代码略
//判断 b 是否回文,代码略
if (flag) {
cout << "Yes" << endl;//存在一种分割方案
flag2 = true;//确认已经有解
}
}