验证回文串的一点解题思路

回文串,就是说给出的字符串中的字符是否对称,即:第一个字符与最后一个字符相等,第二个字符等于倒数第二个字符,以此类推,忽略大小写以及标点符号。

e.g:

A man, a plan, a canal: Panama =====>>>>输出应为true

race a car ======>>>>输出应为false

这道题,在看清楚题目要求之后,其实就可以有解题的思路了。忽略大小写,那直接把字符串全都转换为小写就可以了(大写也可以啦只要喜欢就好),这样在后面的判断语句中就可以写的比较简单。另外,我个人是比较偏爱数组的,对字符串比较不感冒,所以我在这里就用一个char数组来存储这个字符串并进行操作。比如说剔除一些空格或者标点符号等一些奇奇怪怪的东西。

(貌似用string的split()方法也可以??菜鸡一个,并不是很清楚)在剔除这些东西之后就可以用一个for循环来遍历这个char数组并且对其中的元素进行比较了。
代码如下:
class Solution {
    public boolean isPalindrome(String s) {
        int length = s.length();
        String s1 = s.toLowerCase();
        char[] ch = s1.toCharArray();        //题目所说,空的字符串当成一个有效的回文串
        if(s.isEmpty())
        {
            return true;
        }        //如果长度只有1的话,无论如何它的逆序都等于它本身
        if(length == 1)
        {
            return true;
        }
        int count = 0;  //用于记录符合条件的字符数目
        int index = 0;
        for(char c:ch)
        {
            if((c>=‘a‘&&c<=‘z‘)||(c>=‘0‘&&c<=‘9‘))
            {
                count++;
            }
        }        //如果全部是一些奇奇怪怪的东西,虽然看起来极度奇怪,但题目说它是有效的回文串我也没有办法啊摊手
        if(count == 0)
        {
            return true;
        }
        else
        {
            char[] ch1 = new char[count];
            for(char c:ch)
            {
                if((c>=‘a‘&&c<=‘z‘)||(c>=‘0‘&&c<=‘9‘))
                {
                    ch1[index] = c;
                    index++;
                }
            }/***在这里其实可以创建两个字符串,然后把操作过后的char数组以及char数组的逆序赋值给这两个字符串,如果两个字符串相等的话则证明给出的字符串是回文串。*不过我感觉这个方法其实更次,时间并不会减少,而且内存还增加了**/
            for(int i=0,j=count-1; i<=j; i++,j--)
            {
                if(ch1[i]!=ch1[j])
                {
                    return false;
                }
            }
        }

        return true;

    }
}

这段代码运行的时间和占用的内存好像并不稳定,试过提交几次得到的结果都并不相同。在最后的循环判断那里,虽然我只是觉得注释所说的方法所需要的时间更长,但毕竟没有真正运行比较过,所以说不定,有机会的话要试一下效果(说说罢了,并不会试)

原文地址:https://www.cnblogs.com/WakingShaw/p/11144599.html

时间: 2024-10-09 06:10:45

验证回文串的一点解题思路的相关文章

125验证回文串

Algorithm [leetcode]125验证回文串 https://leetcode.com/problems/valid-palindrome/ 1)problem 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: fal

力扣(LeetCode)验证回文串 个人题解

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false 这题是验证回文串的一个变种,因为里面有干扰的字符串存在,不能直接判断,不过也很好解决,直接添加过滤的语句,遇到不是数字且不是字母的直接跳过,只有两边都是合法的,才进行比

前端与算法 leetcode 125. 验证回文串

目录 # 前端与算法 leetcode 125. 验证回文串 题目描述 概要 提示 解析 解法一:api侠 解法二:双指针 算法 传入测试用例的运行结果 执行结果 GitHub仓库 查看更多 # 前端与算法 leetcode 125. 验证回文串 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: tru

LeetCode(125):验证回文串

Easy! 题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false 解题思路: 验证回文字符串是比较常见的问题,所谓回文,就是一个正读和反读都一样的字符串,比如"level"或者"n

125. 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false 思路:从头尾开始同时遍历比较 目前 beat 95% class Solution { public boolean isPalindrome(String s) {

LeetCode 第125题 验证回文串

(一)题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false (二)算法思路 1 先将字符串转换成字符数组 用到的函数 toCharArray() 2 从两端开始判断每一个字符是否为字母或数字,虽然题目说的只考虑字

[LeetCode] 125. 验证回文串

题目链接 : https://leetcode-cn.com/problems/valid-palindrome/ 题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例: 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false 思路: 思路一: 用正则提取字母

leetcode.字符串.125验证回文串-Java

1. 具体题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false 2. 思路分析 对于给定的字符串,其中可能包括有无效字符,所以需要先将原字符串中的无效字符去掉(用正则表达式判断),得到新字符串后用双指针比较首尾字符是否

力扣(LeetCode)125. 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false java知识点 Java 字符串拼接,推荐使用StringBuilder String 本身没有反转函数 ,但是StringBuilder有 reverse() Str