zoukankan      html  css  js  c++  java
  • LeetCode: Valid Palindrome 解题报告

    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.

    SOLUTION 1:

    左右指针往中间判断。注意函数: toLowerCase

     1 /*
     2     SOLUTION 1: Iterator.
     3     */
     4     public boolean isPalindrome1(String s) {
     5         if (s == null) {
     6             return false;
     7         }
     8         
     9         int len = s.length();
    10         
    11         boolean ret = true;
    12         
    13         int left = 0;
    14         int right = len - 1;
    15         
    16         String sNew = s.toLowerCase();
    17         
    18         while (left < right) {
    19             // bug 1: forget a )
    20             while (left < right && !isNumChar(sNew.charAt(left))) {
    21                 left++;
    22             }
    23             
    24             while (left < right && !isNumChar(sNew.charAt(right))) {
    25                 right--;
    26             }
    27             
    28             if (sNew.charAt(left) != sNew.charAt(right)) {
    29                 return false;
    30             }
    31             
    32             left++;
    33             right--;
    34         }
    35         
    36         return true;
    37     }
    38     
    39     public boolean isNumChar(char c) {
    40         if (c <= '9' && c >= '0' || c <= 'z' && c >= 'a' || c <= 'Z' && c >= 'A') {
    41             return true;
    42         }
    43         
    44         return false;
    45     }
    View Code

    SOLUTION 2:

    引自http://blog.csdn.net/fightforyourdream/article/details/12860445 的解答,会简单一点儿。不用判断边界。

    左右指针往中间判断。新技能GET: isLetterOrDigit 

     1 /*
     2     SOLUTION 2: Iterator2.
     3     */
     4     public boolean isPalindrome(String s) {
     5         if (s == null) {
     6             return false;
     7         }
     8         
     9         int len = s.length();
    10         
    11         boolean ret = true;
    12         
    13         int left = 0;
    14         int right = len - 1;
    15         
    16         String sNew = s.toLowerCase();
    17         
    18         while (left < right) {
    19             // bug 1: forget a )
    20             if (!Character.isLetterOrDigit(sNew.charAt(left))) {
    21                 left++;
    22             // bug 2: Line 67: error: cannot find symbol: method isLetterOrDigital(char)    
    23             } else if (!Character.isLetterOrDigit(sNew.charAt(right))) {
    24                 right--;
    25             } else if (sNew.charAt(left) != sNew.charAt(right)) {
    26                 return false;
    27             } else {
    28                 left++;
    29                 right--;
    30             }
    31         }
    32         
    33         return true;
    34     }
    View Code

     

    GITHUB:

    https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/string/IsPalindrome_2014_1229.java

  • 相关阅读:
    Hibernate实现CRUD的例子小结
    AspnetPager表格标题排序功能
    Microsoft企业库配置问题
    orm比较
    外语培训网求鉴定
    DIV随滚动条滚动而滚动
    图片切换效果展示
    转载C#委托之多播委托( 二)
    LINQ 图解
    不用ajax调用搞后台小技巧
  • 原文地址:https://www.cnblogs.com/yuzhangcmu/p/4194369.html
Copyright © 2011-2022 走看看