HappyLeetcode2: Valid Palindrome

來源:互聯網
上載者:User

標籤:io   ar   使用   sp   for   strong   on   問題   bs   

題目

 

解題步驟
  1. 對字串進行處理,字元小寫,去掉多餘標點。
  2. 對Null 字元串的情況進行判斷。
  3. 建立一個新的字串對象,存入原字串翻轉後的結果
  4. 如果這兩個字串相等,那麼返回True,否則,返回False。
我的答案第1版:

class Solution:

    # @param s, a string

    # @return a boolean

    def isPalindrome(self, s):

        s=s.strip()

        s=s.lower()

        eff=‘qwertyuiopasdfghjklzxcvbnm1234567890‘

        s=[s.replace(cha,‘‘) for cha in s if not cha in eff]

        if s==‘‘:

            return True

        return s[:,len(s)/2]==s[(len(s)+1)/2,:][::-1]

 

放入測試中,結果發現耗時過多,在輸入為””的時候完全通不過,目前不知道原因。

 

class Solution {

public:

    bool isPalindrome(string s) {

        string snew="";

        int i;

        for(i=0;i<s.size();++i){

            if(isalnum(s[i])){

                snew+=tolower(s[i]);

            }

        }

        for(i=0;i<=snew.size()/2;++i){

            if(snew[i] != snew[snew.size()-1-i])

                return false;

        }

        return true;

    }

};

這個C++版本的回答成功通過。

參考答案參考答案1

class Solution:

    # @param s, a string

    # @return a boolean

    def isPalindrome(self, s):

        newS= [i.lower() for i in s if i.isalnum()]

        #return newS == newS[::-1]

        return newS[:len(newS)/2] == newS[(len(newS)+1)/2:][::-1] 

 

解析:

用到了兩個我不熟悉的函數:i.isalnum():判斷一個字串或者一個字元是否為字母或者數字。這個非常好用。

對於最後一句話: newS[:len(newS)/2] == newS[(len(newS)+1)/2:][::-1]。如果涉及到列表長度的問題時,有時會考慮到列表長度為奇數和偶數的不同的情況。這句話對列表長度為奇數和偶數的都考慮過了,都符合要求。

參考答案2python
class Solution:
    # @param s, a string
    # @return a boolean
    def isPalindrome(self, s):
        if s == ‘‘:
            return True
        else:
            sTmp = ‘‘
            for i in range(0, len(s)):
                if s[i] >= ‘a‘ and s[i] <= ‘z‘ or s[i] >= ‘0‘ and s[i] <= ‘9‘ or s[i] >= ‘A‘ and s[i] <= ‘Z‘:
                    sTmp += s[i]
            sTmp = sTmp.lower()
            for i in range(0, len(sTmp)/2):
                if sTmp[i] != sTmp[len(sTmp)-1-i]:
                    return False
            return True
C++

bool isPalindrome(string s) {

    if (!s.compare("")) return true;

 

    for (int i = 0, j = s.length() - 1; j >= 0 && i < s.length();) {

        if (!isalpha(s[i]) && !isdigit(s[i])) // if not alphabetic increment

            i++;

        else

        if (!isalpha(s[j]) && !isdigit(s[j])) // if not alphabetic increment

            j--;

        else {

            if (tolower(s[i]) != tolower(s[j]))

                return false;

            i++; j--;

        }

    }

    return true;

}

解析:

加粗的部分好好領會一下。

我的思路是,建立一個新的字串,儲存起來。

後來看過一些參考答案,發現其實沒有必要建立一個新的字串。直接在原有字串上進行判斷就行了,當然,這種方案在後來也有一定的複雜度。嘗試著學習一下。

經驗教訓:

對於字串的使用和操作還是嚴重不熟啊。

收穫學到的東西

函數:

isalnum():這個函數在C++ 和 python之中都有,直接用來判斷是否是字元或者數字。

tolower():將大寫字母轉換為小寫字母。同樣的函數還有toupper():功能不言而喻。

 

HappyLeetcode2: Valid Palindrome

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.