package cn.fansunion.leecode.isNumber; /** * 验证回文串 * 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 力扣 * @author wen.lei@brgroup.com * * 2022-2-18 */ public class ValidPalindrome /* 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 解释:"amanaplanacanalpanama" 是回文串 示例 2: 输入: "race a car" 输出: false 解释:"raceacar" 不是回文串*/ /** * 从字符串中找出“字母数字”的字符串,复用之前一道题的方法。换汤不换药,新瓶装旧酒。 * @param s * @return */ public boolean isPalindrome(String s) if (s== null ||s.length()== 0 ) return false ;
//cn.fansunion.leecode.isNumber.PalindromeNumber.isPalindromeStr(int) //整数版回文数的进阶,同一个问题,稍微有点区别。相同点,都需要对输入做一点处理 String newStr=collectLetterDigit(s); return isPalindromeIntByStr(newStr);
/** * 从一个字符串中找出为字母或数字的字符,返回一个新的字符串,比如:“abc--]1 23”>"abc123" * @param s * @return */ private String collectLetterDigit(String s) StringBuilder sb = new StringBuilder(); for ( char ch:s.toLowerCase().toCharArray()) if (Character.isLetterOrDigit(ch)) sb.append(ch);
return sb.toString();
//根据isPalindromeIntByStr,简单处理 public boolean isPalindromeIntByStr(String numStr) //左右比较,双指针 for ( int start = 0 , end = numStr.length() - 1 ; start < end; start++, end--) if (numStr.charAt(start)!=numStr.charAt(end)) return false ;
return true ;
/** * 仅供参考用:是否为回文数:number->str 进阶:你能不将整数转为字符串来解决这个问题吗? * @param x * @return */ public boolean isPalindromeIntByStr( int x) if (x < 0 ) return false ;
String numStr = String.valueOf(x); //左右比较,双指针 for ( int start = 0 , end = numStr.length() - 1 ; start < end; start++, end--) if (numStr.charAt(start)!=numStr.charAt(end)) return false ;
return true ;
|