1.125. 验证回文串
/*
1.给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
2.说明:本题中,我们将空字符串定义为有效的回文串。 */
class Solution {
public boolean isPalindrome(String s) {
if(s == null) {
return true;
}
s = s.toLowerCase();
for(int i=0,j=s.length()-1;i<=j;i++,j--){
if(s.charAt(i)<='z'&&s.charAt(i)>='a' || s.charAt(i)<='9'&&s.charAt(i)>='0'){
if(s.charAt(j)<='z'&&s.charAt(j)>='a' || s.charAt(j)<='9'&&s.charAt(j)>='0'){
if(s.charAt(i)!=s.charAt(j)){
return false;
}
}else{
i--;
}
}else{
j++;
}
}
return true;
}
}
2.剑指 Offer II 018. 有效的回文
/*
1.给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
2.本题中,将空字符串定义为有效的 回文串 。 */
class Solution {
public boolean isPalindrome(String s) {
s=s.toLowerCase();
int l=0,r=s.length()-1;
while(l<r) {
while(l<r&&!check(s.charAt(l))) l++;
while(l<r&&!check(s.charAt(r))) r--;
if(l<r&&s.charAt(l)!=s.charAt(r)) return false;
l++;
r--;
}
return true;
}
private boolean check(char c) {
return (c>='a'&&c<='z') ||(c>='0'&&c<='9');
}
}
3.面试题 01.04. 回文排列
/*
1.给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
2.回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
3.回文串不一定是字典当中的单词。 */
class Solution {
public boolean canPermutePalindrome(String s) {
HashMap<Character, Integer> str = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
str.put(s.charAt(i), str.getOrDefault(s.charAt(i), 0) + 1);
}
int n = 0;
for (int values : str.values()) {
if (values % 2 == 1) {
if (++n > 1)
return false;
}
}
return true;
}
}