Example 20
验证回文串
题目概述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例 2:
输入: "race a car"
输出: false
解释:"raceacar" 不是回文串
解题思路:最简单的方法是对字符串s 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串sgood 中。这样我们只需要判断sgood 是否是一个普通的回文串即可。
使用语言中的字符串翻转 API 得到sgood 的逆序字符串sgood_rev,只要这两个字符串相同,那么sgood 就是回文串。
解题步骤:
1. 定义StringBuffer型变量sgood,用于拼接原字符串去除标点符号以及字母转为小写的符号。
2. 定义for循环,遍历整个字符串s,若某个字符属于字母或数字,则将该字符转换为小写并拼接到sgood中。循环结束后,即得到去除标点符号以及转换为小写的StringBuffer型字符串。
3. 定义StringBuffer型变量sgood_rev存储sgood的翻转StringBuffer型字符串。
4. 判断sgood与sgood_rev是否相等,相等即为回文串,否则不是回文串,将结果返回。
示例代码如下:
public class ValidatePalindromeString { /** * 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 * 说明:本题中,我们将空字符串定义为有效的回文串。 * 示例 1: * 输入: "A man, a plan, a canal: Panama" * 输出: true * 解释:"amanaplanacanalpanama" 是回文串 * 示例 2: * 输入: "race a car" * 输出: false * 解释:"raceacar" 不是回文串 * 来源:力扣(LeetCode) * 链接:https://leetcode.cn/problems/valid-palindrome */ public static void main(String[] args) { ValidatePalindromeString vps = new ValidatePalindromeString(); System.out.println(vps.isPalindrome("A man, a plan, a canal: Panama")); // true } /** * 官方 * * @param s * @return */ public boolean isPalindrome(String s) { StringBuffer sgood = new StringBuffer(); int length = s.length(); for (int i = 0; i < length; i++) { char ch = s.charAt(i); if (Character.isLetterOrDigit(ch)) { sgood.append(Character.toLowerCase(ch)); } } StringBuffer sgood_rev = new StringBuffer(sgood).reverse(); return sgood.toString().equals(sgood_rev.toString()); } }