您的位置:首页 > 其它

LeetCode - 125. Valid Palindrome

2016-07-04 11:39 246 查看
关于Palindrome的问题,一般可以用两类解法,第一类是使用Stack反向存储内容,然后再和正向的比较;第二类是使用两个指针,一开始一个设置在开头,一个设置在尾部,依次进行比较。这道题目另外有些要求,就是如不不是数字或字母的话就跳过,所以正好可以使用Java内置的Character.isLetterOrDigit()函数进行判断,如果不是的话则head++/tail--,但是注意在这种情况下要使用continue跳出循环而不是继续比较,因为可能连续的非数字或字母存在,在这种情况下如果继续比较的话会出现错误。另外由于这道题目要求的是不顾大小写,所以在比较前要使用Character.toLowerCase()转换成小写的进行比较。时间复杂度为O(n),代码如下:

public class Solution {
public boolean isPalindrome(String s) {
if(s.isEmpty()) return true;

int head = 0;
int tail = s.length() - 1;
int cHead;
int cTail;

while(head < tail){
cHead = s.charAt(head);
cTail = s.charAt(tail);

if(!Character.isLetterOrDigit(cHead)){
head++;
continue;
}
if(!Character.isLetterOrDigit(cTail)){
tail--;
continue;
}
if(Character.toLowerCase(cHead) != Character.toLowerCase(cTail)) return false;
head++;
tail--;
}

return true;
}
}

知识点:

1. Palindrome问题的两类解法:使用Stack或者双指针

2. 记住Java中一些常用的处理char的方法,Character.isLetterOrDigit(), Character.toLowerCase(), Character.toUpperCase()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息