//判断一个字符串是不是回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false
//判断一个字符串是不是回文串
//如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
//
//字母和数字都属于字母数字字符。
//
//给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
import java.util.Locale;
public class Test {
public static boolean isvalid(char ch) {//判断是否为有效字符
if (ch > '0' && ch < '9' || ch > 'a' && ch < 'z') {
return true;
}
return false;
}
public static boolean isPalindrome(String str) {
str = str.toLowerCase();//字符串全部字符转化为小写
int left = 0;
int right = str.length() - 1;//定义两个首尾下标
while (left < right) {
while (left < right && isvalid(str.charAt(left)) == false) {
left++;
}
//这段执行完保证此时left指向的有效字符
while(left < right && isvalid(str.charAt(right)) == false) {
right--;
}
//这段执行完保证此时right指向的有效字符
if(str.charAt(left) == str.charAt(right)){
left++;
right--;
}
//循环判断回文
else {
return false;
}
}
return true;
}
public static void main(String[] args) {
String str = "A man, a plan, a canal: Panama";
if (isPalindrome(str)) {
System.out.println("是回文串!");
} else {
System.out.println("不是回文串!");
}
}
}
此外,判断字符是不是有效字符也可以调用Character的原生方法
if(Character.isDigit(ch) || Character.isLetter(ch)){
return true;
}
else {
return false;
}