zoukankan      html  css  js  c++  java
  • 125. 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.

    链接: http://leetcode.com/problems/valid-palindrome/

    一刷,用两个指针从两个方向,出现的问题

    1. string methods掌握不熟,str.isalpha(), str.isdigit(), str.isalnum()

    2. 内部两个while loop之后需要再检查index是否valid,否则或者应该跳到外循环检查

    3. 不要忘记更新下标

    class Solution(object):
        def isPalindrome(self, s):
            if not s or s == '':
                return True
            i, j = 0, len(s) - 1
            
            while i <= j:
                while i < len(s) and not s[i].isalnum():
                    i += 1
                while j >= 0 and not s[j].isalnum():
                    j -= 1
                if i == len(s) or j < 0:
                    break
                if s[i].isalpha() and s[j].isalpha() and s[i].lower() == s[j].lower() or s[i].isdigit() and s[j].isdigit() and s[i] == s[j]:
                    pass
                else:
                    return False
                i += 1
                j -= 1
            return True

    对比相同方法别人的代码,可以有以下改动:

    class Solution(object):
        def isPalindrome(self, s):
            i, j = 0, len(s) - 1
            while i <= j:
                while i < j and not s[i].isalnum():
                    i += 1
                while i < j and not s[j].isalnum():
                    j -= 1
                if s[i].lower() != s[j].lower():
                    return False
                i += 1
                j -= 1
            return True

    别人还有更pythonic但是需要额外空间复杂度的做法,很赞,平时工作完全能写得出,但是刷题时就忘记了:

    class Solution(object):
        def isPalindrome(self, s):
            cleanlist = [c for c in s.lower() if c.isalnum()]
            return cleanlist == cleanlist[::-1]

    2/18/2017, Java

    注意Java Character各种函数

     1 public class Solution {
     2     public boolean isPalindrome(String s) {
     3         if (s == null) return true;
     4         int start = 0, end = s.length() - 1;
     5         char c1, c2;
     6         boolean isDigitS, isLetterS, isDigitE, isLetterE;
     7         while (start <= end) {
     8             c1 = s.charAt(start);
     9             isDigitS = Character.isDigit(c1);
    10             isLetterS = Character.isLetter(c1);
    11             if (!isDigitS && !isLetterS) {
    12                 start++;
    13                 continue;
    14             }
    15             c2 = s.charAt(end);
    16             isDigitE = Character.isDigit(c2);
    17             isLetterE = Character.isLetter(c2);
    18             if (!isDigitE && !isLetterE) {
    19                 end--;
    20                 continue;
    21             }
    22             if (isDigitE && isDigitS && c1 == c2 || isLetterS && isLetterE && Character.toLowerCase(c1) == Character.toLowerCase(c2)) {
    23                 start++;
    24                 end--;
    25                 continue;
    26             }
    27             return false;
    28         }
    29         return true;
    30     }
    31 }
  • 相关阅读:
    不常用的cmd命令
    js获取宽度
    Marshaling Data with Platform Invoke 概览
    Calling a DLL Function 之三 How to: Implement Callback Functions
    Marshaling Data with Platform Invoke 之四 Marshaling Arrays of Types
    Marshaling Data with Platform Invoke 之一 Platform Invoke Data Types
    Marshaling Data with Platform Invoke 之三 Marshaling Classes, Structures, and Unions(用时查阅)
    Calling a DLL Function 之二 Callback Functions
    WCF 引论
    Marshaling Data with Platform Invoke 之二 Marshaling Strings (用时查阅)
  • 原文地址:https://www.cnblogs.com/panini/p/5615978.html
Copyright © 2011-2022 走看看