
我给出一个很巧妙的实现方法
1)先遍历存储到双端队列中(统一接受小写字符或者数字)
2)再通过removeFirst()和removeLast()方法来判断是否为回文串
思路十分简单,但要注意队列何时为空,要分字符串长度是奇还是偶数长度
class Solution {
public boolean isPalindrome(String s) {
//数字 0 -9 ----->48 - 57 A - Z 65 - 90 a - z 97 - 122 空格 32
ArrayDeque<Character> queue = new ArrayDeque<>();
for(int i = 0 ; i < s.length() ; i++){
int k = isOK(s.charAt(i));
if(k != -1){
queue.add((char)k);
}
}
int size = queue.size();
while(!queue.isEmpty()){
if((size%2 != 0 && queue.size() == 1))break ;
if(queue.removeFirst() != queue.removeLast()){
return false ;
}
}
return true ;
}
public int isOK(char x){
int k = x+0;
if(k >= 48 && k <= 57)return k;
if(k >= 97 && k <= 122)return k;
if(k >= 65 && k <= 90)return k + 32;
return -1;
}
}
利用双端队列,遍历字符串并存入队列,然后依次比较首尾元素来判断是否为回文串。注意空队列情况及奇偶长度字符串的处理。
3万+

被折叠的 条评论
为什么被折叠?



