125Valid Palindrome

来源:互联网 发布:javascript 倒计时 编辑:程序博客网 时间:2024/05/25 20:00

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

题目:

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.For example,"A man, a plan, a canal: Panama" is a palindrome."race a car" is not a palindrome.Note: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, we define empty string as valid palindrome.

解题思路:
这道题对我来说意义很有意义,因为它是我暑假面试中遇到的一道题!!!
另外一道是 1 Two Sum 如此看来当时面试的几道题基本都来自 leetcode !!!
因为当时面试官给出了解答,所以至今记得解题思路。

  • 这道题只考虑数字和字母(字母有大小写之分),所以遇到其它符号时,自动跳过。
  • 具体来说就是,分别从字符串两边向中间遍历,遇到非数字和字母的符号就跳过,直至左右两个指针遇到。

这题有些隐藏的小细节需要注意。
1. 字母有大小写之分,比较之前应该先统一转变为小写或大写。
2. 如果输入的字符串没有数字或字母,该字符串仍然看做是回文。
3. 在指针向中间靠拢的过程中,若指针一直没有遇到数字或字母,就会一直加加或减减,此时应注意判断指针是否越界。

代码实现:

public class Solution {    public boolean isPalindrome(String s) {        if(s == null || s.length() == 0 || s.length() == 1)            return true;        int l = 0;        int r = s.length() - 1;        while(l < r) {            char lc = s.charAt(l);            while((lc < '0' || lc > '9') && (lc < 'A' || lc > 'Z') && (lc < 'a' || lc > 'z')) {                if(l >= r)                    break;                l ++;                lc = s.charAt(l);            }            char rc = s.charAt(r);            while((rc < '0' || rc > '9') && (rc < 'A' || rc > 'Z') && (rc < 'a' || rc > 'z')) {                if(l >= r)                    break;                r --;                rc = s.charAt(r);            }            if(Character.toLowerCase(s.charAt(l)) != Character.toLowerCase(s.charAt(r)))                return false;            l ++;            r --;        }        return true;    }}
475 / 475 test cases passed.Status: AcceptedRuntime: 9 ms
0 0
原创粉丝点击