给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
题目分析:
首先字符串中多余的字符不在考虑的范围之类,而如果字符串是回文串,则可以设置双指针,从首部和尾部开始一一对照字符和数字,看是否相等。
代码实现:
public boolean isPalindrome(String s) { if (s.isEmpty()) return true; int begin = 0; int end = s.length() - 1; char beginChar, endChar; while (begin <= end){ beginChar = s.charAt(begin); endChar = s.charAt(end); if (!Character.isLetterOrDigit(beginChar)){ begin++; continue; } else if (!Character.isLetterOrDigit(endChar)){ end--; continue; } else { if (Character.toLowerCase(beginChar) != Character.toLowerCase(endChar)) return false; else{ begin++; end--; } } } return true; }
主函数:
public static void main(String[] args) { A7 a = new A7(); String s1 = "A man, a plan, a canal: Panama"; String s2 = "race a car"; boolean res1 = a.isPalindrome(s1); boolean res2 = a.isPalindrome(s2); System.out.println(res1); System.out.println(res2); }
运行结果:
true
false