判断一个字符串是否是回文字符串的Java函数实现方法?
发布时间:2023-06-10 09:08:06
回文字符串是指一个字符串正反顺序扫描得到的结果是相同的,例如"level"或者"racecar"即是回文字符串。判断一个字符串是否是回文字符串的方法有很多种,下面介绍几种常见的实现方式。
方法1:双指针法
双指针法是一种常见的判断回文字符串的方法。先定义两个指针i和j,分别指向字符串的头和尾,然后向中间逐一比较对应位置的字符是否相同,如图:

Java代码实现如下:
public static boolean isPalindrome(String s) {
if (s == null || s.equals("")) {
return true;
}
s = s.toLowerCase(); // 不区分大小写
int i = 0, j = s.length() - 1; // 定义双指针
while (i < j) {
while (i < j && !Character.isLetterOrDigit(s.charAt(i))) { // 跳过非字母和数字
i++;
}
while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
j--;
}
if (s.charAt(i) != s.charAt(j)) {
return false;
}
i++;
j--;
}
return true;
}
方法2:利用StringBuilder反转
另一种方式是利用Java中的StringBuilder类。将原字符串反转,如果反转后得到的字符串与原字符串相等,则该字符串是回文字符串。Java代码实现如下:
public static boolean isPalindrome(String s) {
if (s == null || s.equals("")) {
return true;
}
s = s.toLowerCase(); // 不区分大小写
StringBuilder sb = new StringBuilder(s);
sb.reverse(); // 反转字符串
return s.equals(sb.toString()); // 判断是否相等
}
方法3:利用栈
利用栈判断一个字符串是否是回文字符串也是一种常见的方法。将字符串的每一个字符依次压入栈中,然后再依次弹出并连接成一个新的字符串,如果新的字符串与原字符串相等,则该字符串是回文字符串。Java代码实现如下:
public static boolean isPalindrome(String s) {
if (s == null || s.equals("")) {
return true;
}
s = s.toLowerCase(); // 不区分大小写
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (Character.isLetterOrDigit(c)) { // 只压入字母和数字
stack.push(c);
}
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return s.equals(sb.toString());
}
方法4:递归
递归方法也可以用来判断一个字符串是否是回文字符串。对于一个字符串,如果它的第一个字符和最后一个字符相等,并且剩余的字符串也是回文字符串,则该字符串是回文字符串。Java代码实现如下:
public static boolean isPalindrome(String s) {
if (s == null || s.equals("")) {
return true;
}
s = s.toLowerCase(); // 不区分大小写
return isPalindromeHelper(s, 0, s.length() - 1);
}
private static boolean isPalindromeHelper(String s, int start, int end) {
if (start >= end) {
return true;
}
char c1 = s.charAt(start), c2 = s.charAt(end);
if (!Character.isLetterOrDigit(c1)) {
return isPalindromeHelper(s, start + 1, end);
} else if (!Character.isLetterOrDigit(c2)) {
return isPalindromeHelper(s, start, end - 1);
} else if (Character.toLowerCase(c1) != Character.toLowerCase(c2)) {
return false;
} else {
return isPalindromeHelper(s, start + 1, end - 1);
}
}
以上是判断一个字符串是否是回文字符串的一些常用方法,不同方法的时间和空间复杂度也有所不同。在实际应用中,需要根据具体场景选择合适的方法。
