標籤:io ar 使用 sp for strong on 問題 bs
題目
解題步驟
- 對字串進行處理,字元小寫,去掉多餘標點。
- 對Null 字元串的情況進行判斷。
- 建立一個新的字串對象,存入原字串翻轉後的結果
- 如果這兩個字串相等,那麼返回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