判断回文
约 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" 呢?
登录 后可看答案