Java函数实现:判断一个字符串是否为回文
回文是指正着读和倒着读都一样的字符串。例如,"level"、"racecar"、"madam"等都是回文。在Java中实现一个函数,判断一个字符串是否为回文是一个常见的面试题。
算法思路:
判断一个字符串是否为回文,可以采用双指针的方法。定义两个指针,分别指向字符串的首尾字符。依次比较两个指针指向的字符是否相等,如果相等,则将指针向中间移动;如果不相等,直接返回false。当两个指针相遇时,说明字符串是回文,返回true。具体实现如下:
public static boolean isPalindrome(String s) {
if (s == null || s.isEmpty()) {
return true;
}
s = s.toLowerCase(); // 转换为小写字母
int left = 0, right = s.length() - 1;
while (left < right) {
char l = s.charAt(left);
char r = s.charAt(right);
if (!Character.isLetterOrDigit(l)) {
left++;
} else if (!Character.isLetterOrDigit(r)) {
right--;
} else if (l != r) {
return false;
} else {
left++;
right--;
}
}
return true;
}
首先,判断字符串是否为空。如果为空,那么字符串本身就是回文。接着,将字符串转换为小写字母,方便进行比较。
定义两个指针left和right,分别指向字符串的首尾字符。while循环目的是依次比较两个指针指向的字符是否相等,直到两个指针相遇。在每次比较的时候,先判断是否是字母或数字,如果不是,则跳过该字符。如果两个字符不相等,直接返回false。如果相等,将指针向中间移动。
最后,如果循环执行完毕,说明字符串是回文,返回true。
测试样例:
下面给出一些测试样例:
isPalindrome("A man, a plan, a canal: Panama");// true
isPalindrome("race a car"); // false
isPalindrome("madam"); // true
isPalindrome(""); // true
isPalindrome("level"); // true
完整代码如下:
public class Palindrome {
public static boolean isPalindrome(String s) {
if (s == null || s.isEmpty()) {
return true;
}
s = s.toLowerCase(); // 转换为小写字母
int left = 0, right = s.length() - 1;
while (left < right) {
char l = s.charAt(left);
char r = s.charAt(right);
if (!Character.isLetterOrDigit(l)) {
left++;
} else if (!Character.isLetterOrDigit(r)) {
right--;
} else if (l != r) {
return false;
} else {
left++;
right--;
}
}
return true;
}
public static void main(String[] args) {
System.out.println(isPalindrome("A man, a plan, a canal: Panama"));
System.out.println(isPalindrome("race a car"));
System.out.println(isPalindrome("madam"));
System.out.println(isPalindrome(""));
System.out.println(isPalindrome("level"));
}
}
