LeetCode-125番:回文文字列を検証する

6399 ワード

タイトル:
文字列を指定して、文字列かどうかを確認します。文字列と数字文字だけを考慮して、文字の大きさや文字を無視できます。
説明:
この問題では、空の文字列を有効な文字列として定義します。
例1:
入力:「Aマン、a plan、a canal:Panama」出力:true
例2:
入力:「race a car」出力:false
コード:
package leetCode;
/**
 * 2018.7.21
 *       
 * @author dhc
 *
 */
public class OneHunderdAndTwentyFive {
    //                ,  reverse    
    public static boolean isPalindrome(String s) {
        if(s == null) {
            return true;
        }
        char[] str = new char[s.length()];
        int index = 0;

        for(int i = 0;i < s.length();i++) {
            if(( s.charAt(i) >= '0' && s.charAt(i) <= '9') || (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') ||(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')) {
                str[index++] = s.charAt(i);
            }
        }
        String st = new String(str).trim().toLowerCase();
        StringBuffer sb = new StringBuffer(st);
        //           sb      (       ),StringBuffer    equals  ,       ,    String  
        String st1 = sb.reverse().toString();
        if(st.equals(st1)) {
            return true;
        }
        return false;
    }
    //     ,                 ,       6ms
    public static boolean isPalindrome1(String s) {
        if(s == null) {
            return true;
        }
        int l = 0;
        int r = s.length() - 1;
        char lchar = ' ';
        char rchar = ' ';
        while(l < r) {
            //            
            while(l < r) {
                if(( s.charAt(l) >= '0' && s.charAt(l) <= '9') || (s.charAt(l) >= 'a' && s.charAt(l) <= 'z')) {
                    lchar = s.charAt(l);
                    l++;
                    break;
                }
                //       
                if((s.charAt(l) >= 'A' && s.charAt(l) <= 'Z')) {
                    lchar = (char) (s.charAt(l) - 'A' + 'a');
                    l++;
                    break;
                }
                l++;
            }
            //            
            while(r > l) {
                if(( s.charAt(r) >= '0' && s.charAt(r) <= '9') || (s.charAt(r) >= 'a' && s.charAt(r) <= 'z')) {
                    rchar = s.charAt(r);
                    r--;
                    break;
                }
                //       
                if((s.charAt(r) >= 'A' && s.charAt(r) <= 'Z')) {
                    rchar = (char) (s.charAt(r) - 'A' + 'a');
                    r--;
                    break;
                }
                r--;
            }
            if(lchar != rchar) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        String str = "aaA";
        System.out.println(isPalindrome1(str));
    }
}