使用Java函数来判断一个字符串是否为回文字符串的方法有哪些?
发布时间:2023-07-04 22:53:10
判断字符串是否为回文字符串需要比较字符串的首尾字符是否相等,若相等则将双指针向中心移动,继续比较下一个字符,直到指针相遇或者发现不相等的字符。下面是使用Java函数实现回文字符串判断的几种方法:
方法一:使用双指针法
算法步骤:
1. 使用两个指针,一个从字符串的首部开始向后移动,一个从字符串的尾部开始向前移动。
2. 比较两个指针所指向的字符是否相等,若不相等则返回false。
3. 若指针相遇,则说明字符串是回文字符串,返回true。
4. 若经过所有的字符比较都没有发现不相等的情况,则说明字符串是回文字符串,返回true。
5. 时间复杂度为O(n),空间复杂度为O(1)。
代码示例:
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (!Character.isLetterOrDigit(s.charAt(left))) {
left++;
} else if (!Character.isLetterOrDigit(s.charAt(right))) {
right--;
} else {
if (Character.toLowerCase(s.charAt(left))
!= Character.toLowerCase(s.charAt(right))) {
return false;
}
left++;
right--;
}
}
return true;
}
方法二:使用StringBuilder的reverse方法
算法步骤:
1. 将输入的字符串转化为StringBuilder类型,并使用reverse方法将字符串反转。
2. 将反转后的字符串与原字符串进行比较,若相等则原字符串是回文字符串。
3. 时间复杂度为O(n),空间复杂度为O(n)。
代码示例:
public boolean isPalindrome(String s) {
StringBuilder reversed = new StringBuilder(s).reverse();
return s.equals(reversed.toString());
}
方法三:使用正则表达式和字符串分割
算法步骤:
1. 将输入的字符串转化为小写,并通过正则表达式只保留字母和数字部分,去除其他的符号和空格。
2. 将处理后的字符串按照字符进行分割,存储到数组中。
3. 使用双指针法,比较数组的首尾字符是否相等,若不相等则返回false。
4. 若指针相遇,则说明字符串是回文字符串,返回true。
5. 时间复杂度为O(n),空间复杂度为O(n)。
代码示例:
public boolean isPalindrome(String s) {
String lowercase = s.toLowerCase();
String filtered = lowercase.replaceAll("[^a-z0-9]", "");
char[] arr = filtered.toCharArray();
int left = 0;
int right = arr.length - 1;
while (left < right) {
if (arr[left] != arr[right]) {
return false;
}
left++;
right--;
}
return true;
}
综上所述,以上是使用Java函数来判断一个字符串是否为回文字符串的三种方法。具体使用哪种方法可以根据实际情况选择。
