125、680、验证回文字符串

  1. 125、验证回文字符串
    1. 示例 1:
    2. 示例 2:
  2. 题解
    1. 1、过滤 判断
    2. 2、利用API
    3. 3、双指针
  3. 680、验证回文字符串II
    1. 示例 1:
    2. 示例 2:

125、验证回文字符串

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

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

示例 1:

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

示例 2:

输入: "race a car"
输出: false

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

题解

1、过滤 判断

class Solution {
    public boolean isPalindrome(String s) {
        if (s.length() <= 1) {
            return true;
        }
        s = s.toLowerCase();
        StringBuilder sb = new StringBuilder();
        for (char ch : s.toCharArray()) {
            if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')){
                sb.append(ch);
            }
        }
        s = sb.toString();
        int l = 0,r = s.length()-1;
        // System.out.println(s);
        while(l <= r){
            char c1 = s.charAt(l);
            char c2 = s.charAt(r);
            if (c1 != c2) {
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
}

2、利用API

public boolean isPalindrome(String s) {
    String str = s.toLowerCase();
    StringBuilder sb = new StringBuilder();
    for(char c : str.toCharArray()){
        if(Character.isLetterOrDigit(c))    sb.append(c);
    }
    return sb.toString().equals(sb.reverse().toString());
}
// 链接:https://leetcode-cn.com/problems/valid-palindrome/solution/java-da-dao-zhi-jian-6xing-by-rabbitzhao/

3、双指针

class Solution {
    public boolean isPalindrome(String s) {
        
        if (s.length() == 0)
            return true;
        
        String low = s.toLowerCase();
        
        int i = 0;
        int j = low.length() - 1;

        while (i < j)
        {
            if (!Character.isLetterOrDigit(low.charAt(i)))
            {
                i++;
                continue;
            }
            if (!Character.isLetterOrDigit(low.charAt(j)))
            {
                j--;
                continue;
            }
            if (low.charAt(i) != low.charAt(j))
                return false;
            else
            {
                i++;
                j--;
            }
        }
        return true;
    }
}

// 作者:starlikemoon
//  链接:https://leetcode-cn.com/problems/valid-palindrome/solution/javashuang-zhi-zhen-by-starlikemoon/

680、验证回文字符串II

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: "aba"
输出: True

示例 2:

输入: "abca"
输出: True
解释: 你可以删除c字符。

注意:

  • 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

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

class Solution {
    public boolean validPalindrome(String s) {
        int low = 0, high = s.length() - 1;
        while (low < high) {
            char c1 = s.charAt(low), c2 = s.charAt(high);
            if (c1 == c2) {
                low++;
                high--;
            } else {
                boolean flag1 = true, flag2 = true;
                for (int i = low, j = high - 1; i < j; i++, j--) {
                    char c3 = s.charAt(i), c4 = s.charAt(j);
                    if (c3 != c4) {
                        flag1 = false;
                        break;
                    }
                }
                for (int i = low + 1, j = high; i < j; i++, j--) {
                    char c3 = s.charAt(i), c4 = s.charAt(j);
                    if (c3 != c4) {
                        flag2 = false;
                        break;
                    }
                }
                return flag1 || flag2;
            }
        }
        return true;
    }
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

💰

Title:125、680、验证回文字符串

Count:588

Author:攀登

Created At:2020-07-26, 00:19:44

Updated At:2024-06-15, 15:52:32

Url:http://jiafeimao-gjf.github.io/2020/07/26/125%E3%80%81680%E3%80%81%E9%AA%8C%E8%AF%81%E5%9B%9E%E6%96%87%E5%AD%97%E7%AC%A6%E4%B8%B2/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

×

Help us with donation