1. 程式人生 > >判斷一個字串是否是迴文

判斷一個字串是否是迴文

問題:如何判斷一個字串兒是否是迴文?

  所謂的字串兒迴文,就是無論是正序讀還是反序讀,它都是一毛一樣的,比如說字串兒“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.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")

  轉換完成之後就不會有問題了。