力扣第20刷-验证回文串

简介: 力扣第20刷-验证回文串

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());
    }
}
相关文章
|
6月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
55 0
|
1月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
11 0
|
3月前
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
30 6
|
3月前
|
Python
【Leetcode刷题Python】131. 分割回文串
LeetCode题目131的Python编程解决方案,题目要求将给定字符串分割成所有可能的子串,且每个子串都是回文串,并返回所有可能的分割方案。
21 2
|
5月前
|
存储 算法 数据可视化
LeetCode 132题详解:使用动态规划与中心扩展法解决分割回文串 II 的最少分割次数问题
LeetCode 132题详解:使用动态规划与中心扩展法解决分割回文串 II 的最少分割次数问题
|
5月前
|
存储 算法 数据可视化
LeetCode 131题详解:高效分割回文串的递归与动态规划方法
LeetCode 131题详解:高效分割回文串的递归与动态规划方法
|
5月前
力扣经典150题第二十五题:验证回文串
力扣经典150题第二十五题:验证回文串
35 0
|
5月前
|
canal 算法 数据可视化
LeetCode 125题:验证回文串
LeetCode 125题:验证回文串
|
5月前
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
|
5月前
|
存储 算法 Java
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
32 0