判断一个字符串是否是回文

问题:如何判断一个字符串儿是否是回文?

  所谓的字符串儿回文,就是无论是正序读还是反序读,它都是一毛一样的,比如说字符串儿“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")

  转换完成之后就不会有问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值