Leetcode 125: Valid Palindrome

问题描述:

Given a string s, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
判断是否是回文字符串(只考虑alphanumeric characters)

(注释)
The sixty-two ASCII alphanumeric characters
0123456789 and ABCDEFGHIJKLMNOPQRSTUVWXYZ and abcdefghijklmnopqrstuvwxyz
have their corresponding ASCII code within the ranges [48 … 57], [65 … 90] and [97 … 122].

思路:这道题思路很简单,首先先把源字符串缩减成只含有alphanumeric characters的字符串并统一大小写。再判断这个字符串是否是回文的(双指针夹击)

代码一遍过:
通过一段时间的联系,还是稍微有点长进的 :)

class Solution {
    public boolean isPalindrome(String s) {
        //step1: convert s to a string with alphanumeric char only
        StringBuilder sb = new StringBuilder();
        for (int i=0; i<s.length(); i++){
            if ((s.charAt(i)>='A') && (s.charAt(i)<='Z')){
                sb.append((char)(s.charAt(i)+('a'-'A')));
            }
            else if ((s.charAt(i)>='a') && (s.charAt(i)<='z')){
                sb.append(s.charAt(i));
            }
            else if ((s.charAt(i)>='0') && (s.charAt(i)<='9')){
                sb.append(s.charAt(i));
            }
        }
        //So far we should get a string with all lower case alphanumeric char
        //step2: check whether or not this string sb is Palindrome
        
        int left = 0;
        int right = sb.length()-1;
        while(left<right){
            if (sb.charAt(left)==sb.charAt(right)){
                left++;
                right--;
            }
            else{
                return false;
            }
        }
        return true;
    }
}

时间复杂度 O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值