[leetcode]Valid Palindrome

来源:互联网 发布:淘宝货到付款退款流程 编辑:程序博客网 时间:2024/06/03 14:42

题目描述如下:

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.

因为是Easy题,所以第一遍代码根本没怎么想:

public class Solution {     public boolean isPalindrome(String s) {        if(s.length == 0) return true;        String tmpStr = changeStr(s);        return judgeStr(tmpStr);    }    public String changeStr(String s){        String res = "";        int len = s.length(), i;        for(i = 0; i < len; i++){            char ch = s.charAt(i);            if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')){                res = res + ch;            }        }        return res.toLowerCase();    }    public boolean judgeStr(String s){        boolean flag = true;        int len = s.length(), i;        for(i = 0; i < len / 2; i++){            if(s.charAt(i) != s.charAt(len - 1 - i)){                flag = false;                break;            }        }        return flag;    }}

然后在最后一个极暴力的测试数据面前TLE了。

既然这样那就是只能对字符串进行一遍扫描,最常用的就是双指针法,注意一下这里数字也是有效字母

public class Solution {       public boolean isPalindrome(String s) {        return judgeStr(s);    }    public boolean judgeStr(String s){        if(s.length() == 0) return true;        char preLetter, lastLetter;        int i = 0, j = s.length() - 1;        while(i < j){            while(!isLetter(s.charAt(i)) && i < j) i ++;            while(!isLetter(s.charAt(j)) && i < j) j --;            if(i >= j) break;              preLetter = s.charAt(i);            lastLetter = s.charAt(j);            if(lowerCase(preLetter) != lowerCase(lastLetter)) return false;              else {                  i ++;                  j --;              }          }          return true;     }    public boolean isLetter(char ch){        return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z'                || ch >= '0' && ch <= '9';     }    public char lowerCase(char ch){        if(ch >= 'A' && ch <= 'Z') return (char)(ch + 'a' - 'A');          else return ch;    }}

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

0 0
原创粉丝点击