1 条题解
-
0
自动搬运
来自洛谷,原作者为

chen_zhe
Aya 敲可爱的~搬运于
2025-08-24 21:16:41,当前版本为作者最后更新于2024-11-12 20:06:00,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
欢迎报名洛谷网校,期待和大家一起进步!
本题考察字符串和相关函数的使用。
题目问,每个字符串是否由两个长度至少为 的回文串前后拼接而成。先简化问题:如何获取这两个字符串呢(先不考虑是不是回文)?
可以枚举开头的字符串长度 ,这样便可以知获得这两个字符串了。截取字符串的常用函数是
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;//确认已经有解 } }
- 1
信息
- ID
- 10859
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者