国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Leetcode 125. Valid Palindrome

2019-11-14 09:07:00
字體:
供稿:網(wǎng)友

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.

s思路: 1. 確實(shí)沒想到給定的string如果是空的話,怎么算?這個(gè)不周全的考慮,其實(shí)是思維上的不到位,思維的層次還不夠,只考慮問題如何解決?沒考慮問題的具體范圍,也就是說沒有花時(shí)間去觀察問題的邊界在哪兒,不考慮邊界,對問題的界定和認(rèn)知就不清楚不明確。這就是思維的程度還不夠高,對基本問題忽略所致! 2. 回到問題上,這個(gè)題的邊界就是string的最小長度為0的情況。 3. 這個(gè)問題如果是一串只有小寫字母的string就很好判斷,例如:abcba,因?yàn)闃O其規(guī)則、極其美觀的結(jié)構(gòu),所以很容易就做了。這個(gè)題給的string就很不規(guī)則,例如:”A man, a plan, a canal: Panama”,有空格,有符號,有大小寫。不過看到這種情況,也不必驚恐,不知如何是好,或者說不知如何是好也沒什么,但且不要被這種驚恐和不知所措的情緒籠罩,而不能繼續(xù)深入去思考解答方法。 4. 不規(guī)則的情況,就需要兩個(gè)指針。一個(gè)放在左邊,一個(gè)放在右邊,去跟蹤大小寫字母的位置,當(dāng)兩個(gè)指針都恰好指向了大小寫字母,就比較是否相等或相差為26:如果是,則都移動(dòng)一位,進(jìn)行下一個(gè)比較。

//方法1:有bug,而且代碼冗長。利用現(xiàn)成的函數(shù):isalnum()判斷char是否是數(shù)字或字母。//大小寫字母如何對應(yīng)?都轉(zhuǎn)換成toupper()或者tolower()class Solution {public: bool isPalindrome(string s) { // int l=0,r=s.size()-1; while(l<r){ if((s[l]>='a'&&s[l]<='z'||s[l]>='A'&&s[l]<='Z'||s[l]>='0'&&s[l]<='9')&&(s[r]>='a'&&s[r]<='z'||s[r]>='A'&&s[r]<='Z'||s[r]>='0'&&s[r]<='9')){ if(s[l]==s[r]||abs(s[l]-s[r])==32){//bug:當(dāng)s[l]='0',s[r]='P',也出現(xiàn)abs(s[l]-s[r])==32。 l++;r--; }else return false; }else if((s[l]>='a'&&s[l]<='z'||s[l]>='A'&&s[l]<='Z'||s[l]>='0'&&s[l]<='9')) r--; else if (s[r]>='a'&&s[r]<='z'||s[r]>='A'&&s[r]<='Z'||s[r]>='0'&&s[r]<='9') l++; else {r--;l++;} } return true; }};//方法2:用isalnum()判斷char是否是數(shù)字或字母;大小寫轉(zhuǎn)換用toupper()或者tolower()//代碼的if-else還可以簡化,看方法3class Solution {public: bool isPalindrome(string s) { // int l=0,r=s.size()-1; while(l<r){ if(isalnum(s[l])&&isalnum(s[r])){ if(tolower(s[l])!=tolower(s[r])) return false; l++;r--; }else if(!isalnum(s[l])) l++; else if(!isalnum(s[r])) r--; else {l++;r--;} } return true; }};//方法3:方法2基礎(chǔ)上優(yōu)化。簡化if-else,代碼清楚不含糊。class Solution {public: bool isPalindrome(string s) { // int l=0,r=s.size()-1; while(l<r){ if(!isalnum(s[l])) l++; if(!isalnum(s[r])) r--; if(isalnum(s[l])&&isalnum(s[r])){ if(tolower(s[l])!=tolower(s[r])) return false; l++;r--; } } return true; }};
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 曲沃县| 垣曲县| 萍乡市| 礼泉县| 临城县| 房山区| 西平县| 象山县| 吕梁市| 安庆市| 西安市| 汤原县| 平南县| 伊通| 宁海县| 邹平县| 盐源县| 邮箱| 衢州市| 浠水县| 罗山县| 黄冈市| 巴彦淖尔市| 大兴区| 邻水| 沁阳市| 三门县| 甘德县| 错那县| 聂拉木县| 诏安县| 阿瓦提县| 鲁甸县| 宝应县| 比如县| 江永县| 花垣县| 蚌埠市| 尚志市| 澜沧| 望城县|