首页 > 其他分享 >每日一练:LeeCode-125、验证回文串【字符串+双指针】

每日一练:LeeCode-125、验证回文串【字符串+双指针】

时间:2024-03-17 11:33:01浏览次数:25  
标签:字符 right false 字母 LeeCode 125 回文 true left

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后短语正着读和反着读都一样。则可以认为该短语是一个 回文串

字母和数字都属于字母数字字符

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false

示例 1:

输入: s = "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。

示例 2:

输入:s = "race a car"
输出:false
解释:"raceacar" 不是回文串。

示例 3:

输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 10^5
  • s 仅由可打印的 ASCII 字符组成

思路

第一次写的(失败,过不了)

class Solution {
    public boolean isPalindrome(String s) {
        //先将字符串中的大小字母遍历出来,统计个数
        int count=0;
        s=s.toLowerCase();
        char[] chars = s.toCharArray();
        for(int i=0;i<s.length();i++){
            if(0<=chars[i]-'a'&&chars[i]-'a'<26){
                count++;
            }
        }
        int m=0;
        char[] ch = new char[count];
        for(int i=0;i<s.length();i++){
            if(0<=chars[i]-'a'&&chars[i]-'a'<26){
                ch[m++]=chars[i];
            }
        }
        for(int right=ch.length-1,left=0;left<right;right--,left++){
            if(ch[left]!=ch[right])return false;
        }
        return true;        
    }
}

在这里插入图片描述

双指针法1

  • 因为题中说了,只考虑字母和数字,所以不是字母和数字的先过滤掉
  • 然后把两个字符变为小写,在判断是否一样,如果不一样,直接返回false
    public boolean isPalindrome(String s) {
        if (s.length() == 0)
            return true;
        int left = 0, right = s.length() - 1;
        while (left < right) {
            //因为题中说了,只考虑字母和数字,所以不是字母和数字的先过滤掉
            while (left < right && !Character.isLetterOrDigit(s.charAt(left)))
                left++;
            while (left < right && !Character.isLetterOrDigit(s.charAt(right)))
                right--;
            //然后把两个字符变为小写,在判断是否一样,如果不一样,直接返回false
            if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right)))
                return false;
            left++;
            right--;
        }
        return true;
    }

双指针法2

  • 在比较之前字母全部转化为小写,这里改为for循环的方式
  • 如果字符是字母或数字此方法返回true,否则为false
  • 一个一个字符比较
    public boolean isPalindrome(String s) {
        if (s == null || s.length() == 0)
            return true;
        s = s.toLowerCase();
        for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
            //如果字符是字母或数字此方法返回true,否则为false
            while (i < j && !Character.isLetterOrDigit(s.charAt(i)))
                i++;
            while (i < j && !Character.isLetterOrDigit(s.charAt(j)))
                j--;
            if (s.charAt(i) != s.charAt(j)) //一个一个字符比较
                return false;
        }
        return true;
    }

标签:字符,right,false,字母,LeeCode,125,回文,true,left
From: https://blog.csdn.net/kdzandlbj/article/details/136773821

相关文章

  • 第五十七天| 647. 回文子串、5.最长回文子串、516.最长回文子序列
    Leetcode 647.回文子串题目链接:647回文子串题干:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的......
  • 奇怪的回溯增加了 | leetcode131分割回文串
    题目要求:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]示例2:输入:s="a"输出:[["a"]]上述为常规做法,这里回溯的时候是i+1的,就很正常 这是我第一次做的时候自己憋出来......
  • Leecode Day3
    初始想法也是用双指针,问题在于没有灵活运用与运算(实现求和后结果满足二进制表达形式),未设置加位!(add);多了索引位置i,只需要指针i和j。当前位为空。错误代码如下:学习画图小匠的代码:https://leetcode.cn/problems/add-binary/solutions/2652640/javapython3cwei-yun-suan-s......
  • Leetcode刷题-动态规划-最长回文子串
    链接:5.最长回文子串-力扣(LeetCode)给你一个字符串s,找到s中最长的回文子串,如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1<=s.length<=1000s......
  • 125. 验证回文串c
    回文串置逆,栈,双指针。booljudge(charc){if(c>='a'&&c<='z')returntrue;if(c>='A'&&c<='Z')returntrue;if(c>='0'&&c<='9')returntrue;return......
  • 234. 回文链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*pre;booljudge(structListNode*head){if(!head)returntrue;booltemp=judge(head->next);if(!temp)r......
  • 信息学奥赛一本通:1146:判断字符串是否为回文
    【题目描述】输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。【输入】输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。【输出】如果字符串是回文,输出yes;否则,输出no。【输入样例】abcdedcba【输出样例】yes【参考程序......
  • 回文树
    例题HDU-5421翻译如果字符串是静态的,则可以使用Manacher算法。但本题的字符串可以动态在首位添加字符,无法使用Manacher。本题可以使用回文树(回文自动机)算法。该算法的时间复杂度为\(\mathcal{O}(N)\),但空间复杂度较差,因为其本质上是字典树。1回文树的关键技术回文树的......
  • 回文自动机学习笔记
    回文自动机学习笔记定义所谓自动机,是一个对信号序列进行判定的数学模型。即对一连串有顺序的信号关于某一个判定给出或真或假的判定。所谓回文自动机,就是对一个字符串进行其是否为回文串的判定。也就是存储字符串\(s\)中的所有的回文串。与\(\text{SA}\)不同的是,\(\text{SA......
  • PLSQL登录ora_12541无法识别连接符
       tnsnames.ora文件配置时,有一定的格式要求,一般从其他地方粘贴时,地址端口服务名都不会有什么问题,这时粘贴时要注意各行的格式要求:<ATOMICSCHEMANAME>=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOSTNAME>)(PORT=<PORTNUMBER>)))(CON......