法一:
api法
//给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
//
// 本题中,将空字符串定义为有效的 回文串 。
//
//
//
// 示例 1:
//
//
//输入: s = "A man, a plan, a canal: Panama"
//输出: true
//解释:"amanaplanacanalpanama" 是回文串
//
// 示例 2:
//
//
//输入: s = "race a car"
//输出: false
//解释:"raceacar" 不是回文串
//
//
//
// 提示:
//
//
// 1 <= s.length <= 2 * 10⁵
// 字符串 s 由 ASCII 字符组成
//
//
//
//
//
// 注意:本题与主站 125 题相同: https://leetcode-cn.com/problems/valid-palindrome/
//
// Related Topics 双指针 字符串 👍 70 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isPalindrome(String s) {
StringBuilder stringBuilder=new StringBuilder();
for (int i = 0; i < s.length(); i++) {
Character cha=s.charAt(i);
if (Character.isLetterOrDigit(cha)){
stringBuilder.append(Character.toLowerCase(cha));
}
}
StringBuilder s2= new StringBuilder(stringBuilder).reverse();//必须先构造s2,在reverse
return stringBuilder.toString().equals(s2.toString());
}
}
//leetcode submit region end(Prohibit modification and deletion)
法2:
双指针(和法1很像):
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isPalindrome(String s) {
StringBuilder stringBuilder=new StringBuilder();
for (int i = 0; i < s.length(); i++) {
Character cha=s.charAt(i);
if (Character.isLetterOrDigit(cha)){
stringBuilder.append(Character.toLowerCase(cha));
}
}
int l=0;
int r=stringBuilder.length()-1;
while (l<r){
if(stringBuilder.charAt(l)!=stringBuilder.charAt(r)){
return false;
}
l++;
r--;
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)