LeetCode-125-验证回文串
题目
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串
,返回 true
;否则,返回 false
。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
1 <= s.length <= 2 * 105
s
仅由可打印的 ASCII 字符组成
题解
这题做过好几遍啦,思路还是很清晰的,但是一开始题目看的快,没看到数字也是要算的,被0P
(零和P
)疯狂薄纱,还以为看错了是OP
,再仔细看题目原来要看数字的......orz
一开始用的方法比较烦,先处理字符串,只保留字母和数字,但是两个循环务必耗时。后来想想用双指针应该时间更优,思路为下:
start
和end
下标作为前后指针标记,我们只需要一次遍历,如果start
处的字符不是数字或者字母(用Character.isLetterOrDigit()
即可)那么start++
,继续往后找,直到start
处为字母或数字;end
指针同理,但是end--
;- 当都为两个指针处的字符都为字母或数字,我们进行比较,如果不相等,说明不是回文串;
- 如果相等了,继续往下比较,直到循环结束;没有不相等的情况说明就是回文串了。
时间60%+,空间50%+,还可以,嘿嘿(●ˇ∀ˇ●)
1 |
|
LeetCode-125-验证回文串
https://excelius.xyz/leetcode-125-验证回文串/