回文字符串_125_680
LeetCode_125原题链接:https://leetcode-cn.com/problems/valid-palindrome/solution/
题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写,和空格影响。
说明:本题中,我们将空字符串定义为有效的回文串。
// 双指针 public boolean isPalindrome(String s) { int n = s.length(); int i = 0; int j = n - 1; while (i < j) { while(i < j && ! Character.isLetterOrDigit(s.charAt(i))) { i++; } while(i < j && ! Character.isLetterOrDigit(s.charAt(j))) { j--; } if(i < j) { if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) { return false; } i++; j--; } } return true; } // API战士1 public boolean isPalindrome(String s) { StringBuilder builder = new StringBuilder(); for (int i = 0;i<s.length();i++){ char c = s.charAt(i); if (Character.isLetterOrDigit(c)){ builder.append(Character.toLowerCase(c)); } } return builder.toString().equals(builder.reverse().toString()); } // API战士2 public boolean isPalindrome(String s) { s = s.replaceAll("[^a-zA-Z0-9]","").toLowerCase(); // return s.equals(new StringBuilder(s).reverse().toString()); }
LeetCode_680原题链接:https://leetcode-cn.com/problems/valid-palindrome-ii/
题目描述:
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
输入: s = "abca" 输出: true 解释: 你可以删除c字符。
class Solution { public boolean validPalindrome(String s) { int i = 0, j = s.length() - 1; while(i < j) { if (s.charAt(i) != s.charAt(j)) { return isValid(s, i + 1, j) || isValid(s, i, j - 1); } i++; j--; } return true; } public boolean isValid(String s, int i, int j){ while(i < j) { if(s.charAt(i) != s.charAt(j)) { return false; } i++; j--; } return true; } }

浙公网安备 33010602011771号