125 验证回文串
说到公司面试,那就是得考出高度,考出水平,什么兼顾这两者呢,那就得看这道
原题描述:
给定一个字符串,判断它是否是回文串。回文串是指正读和反读都一样的字符串。
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
开始coding
上来一看此题描述,Ok,是我们熟悉的字符串类型。
那还不简单,直接暴力解法走起。
public class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
for (int i = 0; i < s.length() / 2; i++) {
if (s.charAt(i) != s.charAt(s.length() - 1 - i)) {
return false;
}
}
return true;
}
}
小明:您好,面试官,我轻松解决了这道题。
面试官:好的,下一位!
小明:您等下,这不科学么?
面试官:虽然让你来拧螺丝,但你真是多一点儿算法都不往下研究了啊?
小明:"上海自来水来自海上”,好的!那就是来个Two Pointer去搞
public class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
int left = 0;
int right = s.length() - 1;
while (left <= right) {
if (s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
面试官满意的说:嗯,这才是我们想要的人才。好了,进入下一场吧!
最后,在遍历过程中,我们还需要注意以下两点:
- 如果两个指针相遇,则说明该字符串是回文串,直接返回 true。
- 如果两个指针指向的字符不相等,则说明该字符串不是回文串,直接返回 false。
希望我的讲解能让大家对这道题有更深刻的理解,好了,快去准备下一题吧!