编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
摘一个示例做个说明.
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
条件分析:
- 以字符数组给出 -> 数据源是数组
- 不能分配额外空间 -> 原地修改
解决思路1:
- 根据分析1,直接采用数组反转
系统数组反转方式,获得数据反转
解决思路2:
1.根据分析1,采用循环交换
采用递归和双指针.递归数组一半长度,交换起始位置和末尾对应位置内容即可
解决思路3:
1.根据分析1,采用循环交换
采用循环和双指针.循环数组一半长度,交换起始位置和末尾对应位置内容即可
代码实现-Swift版本:
思路1代码:
func reverseString(_ s: inout [Character]) {
// 数组反转
s.reverse()
}
思路2代码:
func reverseString(_ s: inout [Character]) {
// 递归、双指针
var index = 0
while index < s.count / 2 {
s.swapAt(index, s.count - 1 - index)
index += 1
}
}
思路3代码:
func reverseString(_ s: inout [Character]) {
// 循环、双指针
for i in 0 ..< s.count / 2 {
s.swapAt(i, s.count - 1 - i)
}
}
测试用例:
var chars: [Character] = ["1","2","s","g","#","&","d","m","i"]
考察要点:
- 递归
- 双指针
- 字符串
网友评论