【发布时间】:2015-12-28 07:39:50
【问题描述】:
我喜欢 Swift 中的许多功能,但使用操作字符串仍然是一件很头疼的事情。
func checkPalindrome(word: String) -> Bool {
print(word)
if word == "" {
return true
} else {
if word.characters.first == word.characters.last {
return checkPalindrome(word.substringWithRange(word.startIndex.successor() ..< word.endIndex.predecessor()))
} else {
return false
}
}
}
只要字符串的长度是奇数,这段代码就会惨遭失败。当然我可以做到,所以块的第一行是if word.characters.count < 2,但是在 Swift 中有没有办法获取子字符串并轻松检查?
更新 我喜欢其中的许多建议,但我想最初的问题可能有点误导,因为这是一个关于 String 的问题,而不是为函数获得正确的结果。
例如,在 Python 中, checkPalindrome(word[1:-1]) 可以很好地用于递归定义,而 Swift 代码则不那么优雅,因为它需要其他的花里胡哨。
【问题讨论】:
-
你可以检查 String(characters.reverse()) == self
-
检查 word.characters.count % 2 == 1 如果为真则删除中心的字符
-
在 Swift 中操作字符串不是“头疼”!
-
它“惨遭失败”,因为 Swift 不允许使用 startIndex>endIndex 创建范围。
-
其实我前几天学到的是,你可以像这样轻松地将字符串转换为数组。
var stringArray = Array(string)。这将轻松地将任何字符串转换为数组。这当然是使用swift,但你明白我的意思。然后要更改字符串,只需使用stringArray[0] = stringArray[1]即可互换这两个字母。和wallah,你现在已经切换了角色
标签: swift recursion palindrome