双指针
//给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
//
// 说明:本题中,我们将空字符串定义为有效的回文串。
//
// 示例 1:
//
// 输入: "A man, a plan, a canal: Panama"
//输出: true
//
//
// 示例 2:
//
// 输入: "race a car"
//输出: false
//
// Related Topics 双指针 字符串
// 👍 293 👎 0
package leetcode.editor.cn;
//Java:验证回文串
public class P125ValidPalindrome {
public static void main(String[] args) {
Solution solution = new P125ValidPalindrome().new Solution();
// TO TEST
// boolean palindrome = solution.isPalindrome("0P");
// System.out.println(palindrome);
System.out.println(Character.isLetter('1'));
System.out.println(Character.isLetterOrDigit(':'));
System.out.println(Character.toLowerCase('9'));
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() < 2)
return true;
int l = 0;
int r = s.length() - 1;
while (l < r) {
while (l < r && ifJudge(s.charAt(l)) == 0)
l++;
while (l < r && ifJudge(s.charAt(r)) == 0)
r--;
char lc = s.charAt(l);
char rc = s.charAt(r);
int lcType = ifJudge(lc);
int rcType = ifJudge(rc);
if (lcType != rcType) return false;
if (lc != rc) {
if (Math.abs(lc - rc) != 32) return false;
}
l++;
r--;
}
return true;
}
public int ifJudge(char c) {
if (c >= '0' && c <= '9')
return 1;
if (c >= 'a' && c <= 'z')
return 2;
if (c >= 'A' && c <= 'Z')
return 2;
return 0;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}
如果熟悉api,那么正则替换非字母数字字符+StringBuilder替换+比较
//给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
//
// 说明:本题中,我们将空字符串定义为有效的回文串。
//
// 示例 1:
//
// 输入: "A man, a plan, a canal: Panama"
//输出: true
//
//
// 示例 2:
//
// 输入: "race a car"
//输出: false
//
// Related Topics 双指针 字符串
// 👍 293 👎 0
package leetcode.editor.cn;
//Java:验证回文串
public class P125ValidPalindrome {
public static void main(String[] args) {
Solution solution = new P125ValidPalindrome().new Solution();
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isPalindrome(String s) {
String input = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
String inputReverse = new StringBuilder(input).reverse().toString();
return input.equals(inputReverse);
}
}
}