雖然昨天說要擴大主題,但早上還是用習慣的題目來熱身會比較恰當,我是這麼想的。
於是找到了一個字串題目,125. Valid Palindrome要判斷去除掉標點符號後的句子是不是回文,也就是從前往後讀和從後往前讀是一樣的內容。
class Solution {
fun isPalindrome(s: String): Boolean {
val result = s.toLowerCase().replace("[^a-z]", "")
println("$result")
repeat(result.length / 2) {
if (result[it] != result[result.lastIndex-it]) {
return false
}
}
return true
}
}
看著學妹打的程式碼,我驚訝的說:「哎呀,居然不是直接用reversed
方法來反轉比對啊。」
「因為reversed
不是把整個字串都跑了一遍嗎?前前後後比對的話,只需要一半的迴圈。」學妹也開始有時間觀念了,甚好。
「啊,不過我還沒寫好啦,因為有問題,所以我正在查。」
「難怪妳用了println
方法。」
「對呀,幸好println
方法在Leetcode也能用,我一看stdout格子就知道問題是出在正規式沒正常工作。」
「嗯,我看看,先全部小寫,再用^
這個否定所有英文小寫。嗯,這樣寫應該會把所有非英文的字都拿掉的。啊,試試加上.toRegex()
如何?也許被誤認成普通字串了,用這個可以強制認知成正規式。」
「啊!可以了!」學妹發出喜悅的聲音。
不過為防萬一,測試前我們還是按了Use Example Testcases
加上所有範例,畢竟一開始的預設值只有第一個範例。
確認三個範例都通過後學妹送出了答案,沒想到電腦瞬間就發出了高分貝的警鈴聲,浴室也傳來氣勢磅礡的水聲!
出錯了嗎!
「我去關水,學姊妳幫忙找一下錯誤!」學妹說著就跑向浴室。
我慌亂的檢查導致出錯的案例。
「"0P"
?拿掉數字的確是回文啊?等等,我看看題目,啊,Alphanumeric characters include letters and numbers.
,原來數字不用拿掉嗎!」
「學姊!水關不掉!而且因為沒有排水孔的關係,水已經開始往浴室外面淹了!」
「什麼!」我嚇得聲音都尖起來。「那妳趕快過來改答案!」
學妹聽了馬上往我這邊走,但是沒走幾步就突然停下腳步,瞪著我說:「學姊,電腦是不是飄起來了?」
「什麼,別開玩笑了,趕快過來!」水都淹到小腿了還發什麼呆。
「不是玩笑,學姊妳轉頭看啊!」
我猛地轉頭,臉差點撞到螢幕,等等,我現在是站著的,螢幕怎麼會撞到我臉?
我低頭一看,整台電腦都不在原本的位置了。
「是不是電腦為了避開水才往上飄啊?」學妹猜測。
啊,的確,如果沒有往上移動的話,電腦已經泡水了。
但是繼續往上飄的話,最後就碰不到了!
學妹彷彿也想起了這點,匆匆地往這邊移動,但是因為水流,靠近的速度無法加快。
我左右看看有沒有可以利用的東西,看到了那張矮桌。
我使勁把它直立起來,如我所想,這張桌子的高度雖然離天花板有段距離,但是也已經比我高上許多。
高度是足夠了,可是學妹要怎麼爬上去?
而且上面還有之前的杯子和碗。
對了!那些杯子和碗!
學妹終於掙扎著到了我身邊。
「學姊,現在怎麼辦?」
「學妹,妳玩過抱石嗎?等一下妳就沿著我的杯子和碗上去。我剛剛已經調整過位置了。」
「哈?」學妹愣了一下反應過來。「對喔!那些碗盤只有妳可以移動。」
之前我本來想把自己的牛奶送給學妹,結果發現她不能動我的杯子;反之,我也不能動她的杯子。碗也是一樣。
學妹抓著杯子,確認非常穩固後,攀上去之前問了我一聲:「學姊玩過抱石嗎?」
「沒有,但是有看過抱石動畫,大概知道原理?」
「那算什麼,我看了駭客電影也沒學到駭客技術啊。」學妹吐槽。
「學妹妳莫非是因為憧憬駭客才進我們系的吧。」儘管在這種緊張的時候,我還是忍不住笑了。
「⋯⋯不行嗎?」學妹不甘願地承認。
「沒什麼不行,趕快上去將正規式從非英文[^a-z]
的規則,改成非英文非數字的[^a-z0-9]
。就算我會游泳,也不想一直泡在水裡呀。」
學妹沒再回嘴,爬到了適合的高度一手支撐著身子,一手修改程式碼。
我仰躺在水面上,看著越來越近的天花板,想著學妹的打字速度應該要加強的時候,終於水面停止上漲。
class Solution {
fun isPalindrome(s: String): Boolean {
val result = s.toLowerCase().replace("[^a-z0-9]".toRegex(), "")
repeat(result.length / 2) {
if (result[it] != result[result.lastIndex-it]) {
return false
}
}
return true
}
}