“回文字符串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文字符串。
如果只考虑字符串中的字母和数字字符,并且忽略字母的大小写,验证某字符串是否回文呢?
直接上代码:
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String text = sc.nextLine();
boolean isPalindrome = new Solution().isPalindrome(text);
System.out.println(text+"是回文:"+isPalindrome);
}
/**
* 验证字符串是否回文
* @param s
* @return
*/
public boolean isPalindrome(String s) {
char[] arr = s.toCharArray();
int i = 0, j = arr.length - 1;
while (i < j) {
// 指针i向右移动,指向第一个是字母或数字的位置
while (!this.isLetterOrDigit(arr[i]) && (i < j)) {
i++;
}
// 指针j向左移动,指向第一个是字母或数字的位置
while (!this.isLetterOrDigit(arr[j]) && (i < j)) {
j--;
}
if (Character.toLowerCase(arr[i]) != Character.toLowerCase(arr[j])) {
return false;
}
i++;
j--;
}
return true;
}
/**
* 方法:判断字符是字母或数字
*/
public boolean isLetterOrDigit(char ch) {
if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9')) {
return true;
} else {
return false;
}
}
}
输入测试字符串结果:
A man, a plan, a canal: Panama
A man, a plan, a canal: Panama是回文:true
race a car
race a car是回文:false