判断一个字符串是否是回文
2017-09-21 05:50
190 查看
问题:如何判断一个字符串儿是否是回文?
所谓的字符串儿回文,就是无论是正序读还是反序读,它都是一毛一样的,比如说字符串儿“rotator”,无论是从左往右读,还是从右往左读,它都是同一个字符串儿。
思路:因为回文是正着读和反着读是一样的,所以我们马上就想到了reversed()函数。而这个函数的返回值是一个数组,因此最后肯定会用到数组的比较。好在数组属于集合,是值类型,比较起来就容易多了:
上面的代码看起来是符合题目的要求了,但是实际上它还有一个bug,因为字母是分大小写的。如果将本来符合题目要求的字符串儿换成大小写混合的形式,那么它的结果就不符合题目要求:
程序bug.png
解决这个bug也非常的容易,就是在比较上面这两个数组之前,先将输入的字符串儿统一转换成大写或者小写:
转换完成之后就不会有问题了。
所谓的字符串儿回文,就是无论是正序读还是反序读,它都是一毛一样的,比如说字符串儿“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")
转换完成之后就不会有问题了。
相关文章推荐
- 判断一个数(或字符串)是否是回文数(回文字符串)
- 判断一个字符串中所有子串是否为回文子串
- 判断一个数是否为回文数,字符串是否为回文字符串
- 判断一个字符串是否为回文的递归算法
- 用递归实现判断一个字符串是否是回文的方法
- 判断一个字符串是否有回文
- 使用bool函数判断一个字符串是否为回文字符串
- 编写函数,判断一个字符串是否是回文
- 算法基础——判断一个字符串至多添加一个字符之后是否回文
- python判断是否可以只插一个字符,让字符串变成回文,返回true/false
- 判断一个字符串是否为回文
- C语言:判断一个字符串是否为回问字符串(回文字符串也是一个字符串,但是原字符串和字符串逆序之后一样,比如”abcba","cddc"就是回文字符串
- 编写函数,判断一个字符串是否是回文
- 判断一个字符串是否为回文,以及求一个字符串中最长回文串
- java 记——课本例题,判断一个字符串是否是回文
- 队列-----判断一个字符串是否是回文
- 判断一个字符串、整数是否为回文字符串或回文数
- 判断一个数是否为回文数,字符串是否为回文字符串
- 设计一个算法判断一个字符串是否是回文
- 判断一个字符串是否为回文的非递归算法