package com.leetcode.easy;
public class Hot125_isPalindrome {
/**
* 调用reverse
* @description:
* @date:2022年6月28日
* @param s
* @return
*/
public static boolean isPalindrome(String s) {
StringBuilder sb = new StringBuilder();
int length = s.length();
for(int i = 0;i<length; ++i) {
char ch = s.charAt(i);
if(Character.isLetterOrDigit(ch)){
sb.append(Character.toLowerCase(ch));
}
}
StringBuilder sbRev = new StringBuilder(sb).reverse();
return sb.toString().equals(sbRev.toString());
}
/**
* 左右指针
* @description:
* @date:2022年6月28日
* @param s
* @return
*/
public static boolean isPalindrome2(String s) {
StringBuilder sb = new StringBuilder();
int length = s.length();
for(int i = 0;i< length;++i) {
char ch = s.charAt(i);
if(Character.isLetterOrDigit(ch)) {
sb.append(Character.toLowerCase(ch));
}
}
int n = sb.length();
int left = 0, right = n - 1;
while(left < right) {
if(sb.charAt(left) != sb.charAt(right)) {
return false;
}
++left;
--right;
}
return true;
}
/**
* 在原串上判断
* @description:
* @date:2022年6月28日
* @param s
* @return
*/
public static boolean isPalindrome3(String s) {
int n = s.length();
int left = 0, right = n-1;
s = s.toLowerCase();
while(left < right) {
while(left < right && !Character.isLetterOrDigit(s.charAt(left)))
++left;
while(left < right && !Character.isLetterOrDigit(s.charAt(right)))
--right;
if(left < right) {
if(s.charAt(left) != s.charAt(right))
return false;
++left;
--right;
}
}
return true;
}
//------------------for-test-------------
public static void main(String[] args) {
String s = "A man, a plan, a canal: Panama";
System.out.println(isPalindrome(s));
System.out.println(isPalindrome2(s));
System.out.println(isPalindrome3(s));
}
}
【*E】leetcode-125.验证回文串
最新推荐文章于 2024-06-15 06:34:43 发布