码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-14 00:40:20      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:false   lse   大小   字母   int   strong   记录   lan   can   

题目描述:

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

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

示例 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. 验证回文字符串

标签:false   lse   大小   字母   int   strong   记录   lan   can   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!