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

Posted hzhqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初级算法-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;
    }
}

 

以上是关于初级算法-16. 验证回文字符串的主要内容,如果未能解决你的问题,请参考以下文章

数据结构和算法LeetCode,初级算法-16验证回文串

数据结构和算法LeetCode,初级算法-16验证回文串

数据结构和算法LeetCode,初级算法-16验证回文串

LeetCode初级-14-验证回文串

算法刷题:LC初级算法

算法刷题:LC初级算法