判断回文

8 分钟

正着读和反着读一样,就是回文,比如 "level"。判断办法是设两个指针,一个 从头、一个 从尾,往中间靠:只要 s[i]s[j] 有一处不相等,立刻断定不是回文;一路都相等、走到中间碰头,就是回文。

string s = "level";
bool ok = true;
int i = 0, j = s.size() - 1;
while (i < j) {
    if (s[i] != s[j]) { ok = false; break; }  // 发现不同立即收工
    i++; j--;
}
cout << (ok ? "是回文" : "不是回文") << "\n";

只需要遍历一半,复杂度 。坑一:循环条件写 i < j 就够了,两个指针相遇或错过就该停,不用扫完整串(扫完是把每对比较了两次,结论不变但浪费)。坑二:发现不等要马上得出"不是"并结束,别继续比后面。坑三:若题目要求忽略大小写或只看字母,先做预处理再套这个双指针。"hello" 首尾 h≠o,一步就判否。

小纸条

"level" 是回文吗?"hello" 呢?

登录 后可看答案

判断回文 · 考级冲刺 · op599 课程