数据结构与算法力扣 初级算法 全套力扣精解

初级算法-字符串-反转字符串

2021-08-16  本文已影响0人  coenen
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

摘一个示例做个说明.
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
条件分析:
  1. 以字符数组给出 -> 数据源是数组
  2. 不能分配额外空间 -> 原地修改
解决思路1:
  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"]

考察要点:

上一篇下一篇

猜你喜欢

热点阅读