Java函数:如何判断字符串是否为回文字符串?
发布时间:2023-07-06 15:19:22
判断一个字符串是否为回文字符串,即正序和倒序读取字符串都是相同的。下面介绍几种不同的方法来判断一个字符串是否为回文字符串。
1. 比较正序和倒序的字符串:将字符串逆序,然后比较逆序后的字符串和原字符串是否相等。如果相等,则原字符串是回文字符串,否则不是。
public static boolean isPalindrome(String str) {
String reverseStr = new StringBuilder(str).reverse().toString();
return str.equals(reverseStr);
}
2. 使用对撞指针:创建两个指针,分别指向字符串的开头和结尾。依次比较两个指针所指的字符是否相等,如果都相等,则将两个指针向中间移动;如果有一个不相等,则字符串不是回文字符串。
public static boolean isPalindrome(String str) {
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
3. 使用递归:递归方法是不断判断字符串的 个字符和最后一个字符是否相等,如果相等,则递归判断去掉首尾字符的字符串是否为回文字符串;如果不相等,则字符串不是回文字符串。当字符串的长度为0或1时,认为是回文字符串。
public static boolean isPalindrome(String str) {
if (str.length() <= 1) {
return true;
}
if (str.charAt(0) != str.charAt(str.length() - 1)) {
return false;
}
return isPalindrome(str.substring(1, str.length() - 1));
}
4. 利用栈的特性:将字符串逐个字符入栈,然后再逐个字符出栈,出栈的字符即为字符串的逆序。最后比较两个字符串是否相等,如果相等,则原字符串是回文字符串,否则不是。
import java.util.Stack;
public static boolean isPalindrome(String str) {
Stack<Character> stack = new Stack<>();
for (char c : str.toCharArray()) {
stack.push(c);
}
StringBuilder reverseStr = new StringBuilder();
while (!stack.isEmpty()) {
reverseStr.append(stack.pop());
}
return str.equals(reverseStr.toString());
}
这些方法都可以用来判断一个字符串是否为回文字符串,任选其中一种即可。
