309验证回文串

Posted huoyingfans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了309验证回文串相关的知识,希望对你有一定的参考价值。

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

  

示例 1:

输入: "A man, a plan, a canal: Panama"

输出: true

解释:"amanaplanacanalpanama" 是回文串

示例 2:

输入: "race a car"

输出: false

解释:"raceacar" 不是回文串

  

提示:

1 <= s.length <= 2 105

字符串 s 由 ASCII 字符组成

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/valid-palindrome

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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;

    

执行结果:通过

显示详情

添加备注

执行用时:4 ms, 在所有 Java 提交中击败了42.91%的用户

内存消耗:41 MB, 在所有 Java 提交中击败了17.97%的用户

通过测试用例:480 480

炫耀一下:

package test.leecode.isNumber;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.isNumber.ValidPalindrome;

/**

 * @author wen.lei@brgroup.com

 *

 * 2022-2-19

 */

public class ValidPalindromeTest

     

    @Test

    public void test()

        //isPalindrome

        ValidPalindrome vp = new ValidPalindrome();

        Assert.assertTrue(vp.isPalindrome("A man, a plan, a canal: Panama"));

        Assert.assertTrue(vp.isPalindrome("abcd-dc-ba"));

        Assert.assertFalse(vp.isPalindrome("race a car"));

        Assert.assertFalse(vp.isPalindrome("abcd-dc-ba1"));

    

以上是关于309验证回文串的主要内容,如果未能解决你的问题,请参考以下文章

125. 验证回文串

LeetCode:验证回文串125

leetcode 验证回文串

LC 验证回文串

3628验证回文串

3628验证回文串