初级算法-16. 验证回文字符串

题目描述:

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

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

示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false

一种解法是将字符串的有效字符存入数组中,再去比较

 1 class Solution {
 2     public boolean isPalindrome(String s) {
 3
 4         int index=0;
 5         char t;
 6         char[] arr=new char[s.length()];
 7         for(int i=0;i<s.length();i++){
 8             t=s.charAt(i);
 9             if((t<=‘z‘&&t>=‘a‘)||(t<=‘Z‘&&t>=‘A‘)||(t>=‘0‘&&t<=‘9‘))
10                 arr[index++]=t;
11         }
12         if(index==0)return true;
13
14         for(int i=0;i<index/2;i++){
15             if(arr[i]>‘9‘&&arr[index-1-i]>‘9‘) {
16                 if(arr[i]!=arr[index-1-i]&&arr[i]!=(arr[index-1-i]+32)&&arr[i]!=(arr[index-1-i]-32))
17                     return false;
18             }
19             else {
20                 if(arr[i]!=arr[index-1-i])
21                     return false;
22             }
23         }
24
25
26         return true;
27     }
28 }

提交记录中最快的(2ms):从两头开始遍历找有效字符进行比较

class Solution {
    public boolean isPalindrome(String s) {
       if(s == null || s=="") return true;
        char[] chs = s.toCharArray();
        int l = 0;
        int r = chs.length - 1;
        all : while(l < r){
        //找左边第一个未用过的有效字符
            while(chs[l]<‘0‘|| chs[l]>‘z‘||(chs[l]>‘Z‘&&chs[l]<‘a‘)||(chs[l]>‘9‘&&chs[l]<‘A‘)){
                l++;
                if(l>=r) break all;
            }
         //找右边第一个未用过的有效字符
            while(chs[r]<‘0‘|| chs[r]>‘z‘||(chs[r]>‘Z‘&&chs[r]<‘a‘)||(chs[r]>‘9‘&&chs[r]<‘A‘)){
                r--;
                if(l>=r) break all;
            }

            if(chs[l] == chs[r] || (Math.abs(chs[l]-chs[r])==32&&chs[l]>=‘A‘)){
                l++; r--;
            }else{
                return false;
            }
        }
        return true;
    }
}

原文地址:https://www.cnblogs.com/hzhqiang/p/10859876.html

时间: 2024-11-07 05:56:54

初级算法-16. 验证回文字符串的相关文章

Validate Palindrome 验证回文字符串

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. For example, "race a car" is not a palindrome. Note:Have you consider that the string might be empty? This is a good question to ask du

Leetcode 680.验证回文字符串

验证回文字符串 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符. 注意: 字符串只包含从 a-z 的小写字母.字符串的最大长度是50000. 1 class Solution { 2 public boolean isPalindromeRange(String s, int i, int j) { 3 for (in

验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 输入: "A man, a plan, a canal: Panama" 输出: true 代码: 思路,这里涉及到了数据清洗,我只要字母和数字,并且字母必须是小写.使用 string,isalnum()可以滤出字母和数字,使用 string.lower()可以滤出小写字母.然后再转换成 list 反转对比即可. http://www.runoob.com/python/python-strings.ht

[LintCode] Valid Palindrome 验证回文字符串

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. Notice Have you consider that the string might be empty? This is a good question to ask during an interview. For the purpose of this problem

LeetCode(125):验证回文串

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

[LeetCode] Palindrome Number 验证回文数字

Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restriction of using ext

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

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

【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】

背景 近期開始研究算法,于是在leetcode上做算法题,第五题Longest Palindromic Substring便是关于回文子串的. 什么是回文字串 回文字符串是指将该字符串前后颠倒之后和该字符串一样的字符串.比如:a,aaaa,aba,abba- 最长回文子串 要求最长回文子串,就须要遍历每个子串,时间复杂度是O(N2):推断字串是不是回文,时间复杂度是O(N),这种话算法的时间复杂度就是O(N3). 我刚開始想到的就是中心扩展法,代码例如以下: public static Stri

最大回文字符串算法详解与优化

背景 最近开始研究算法,于是在leetcode上做算法题,第五题Longest Palindromic Substring便是关于回文子串的. 什么是回文字串 回文字符串是指将该字符串前后颠倒之后和该字符串一样的字符串.例如:a,aaaa,aba,abba- 最长回文子串 要求最长回文子串,就需要遍历每一个子串,时间复杂度是O(N2):判断字串是不是回文,时间复杂度是O(N),这样的话算法的时间复杂度就是O(N3). 我刚开始想到的就是中心扩展法,代码如下: public static Stri