判斷一個字串是否是迴文
阿新 • • 發佈:2019-01-06
問題:如何判斷一個字串兒是否是迴文?
所謂的字串兒迴文,就是無論是正序讀還是反序讀,它都是一毛一樣的,比如說字串兒“rotator”,無論是從左往右讀,還是從右往左讀,它都是同一個字串兒。
思路:因為迴文是正著讀和反著讀是一樣的,所以我們馬上就想到了reversed()函式。而這個函式的返回值是一個數組,因此最後肯定會用到陣列的比較。好在陣列屬於集合,是值型別,比較起來就容易多了:
func challenge(input: String) -> Bool { return input.characters.reversed() == Array(input.characters) } challenge(input: "rotator") // 應該返回true challenge(input: "Hello, world") // 應該返回false challenge(input: "Rotator") // 應該返回true
上面的程式碼看起來是符合題目的要求了,但是實際上它還有一個bug,因為字母是分大小寫的。如果將本來符合題目要求的字串兒換成大小寫混合的形式,那麼它的結果就不符合題目要求:
程式bug.png
解決這個bug也非常的容易,就是在比較上面這兩個陣列之前,先將輸入的字串兒統一轉換成大寫或者小寫:
func challenge1(input: String) -> Bool { // 先將輸入的字串兒轉換成大寫或者小寫 let lowercase = input.lowercased() return lowercase.characters.reversed() == Array(lowercase.characters) } challenge1(input: "rotator") challenge1(input: "Hellow, world") challenge1(input: "Rotator")
轉換完成之後就不會有問題了。