反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的控件,你必须通过原地修改输入数组,使用O(1)的额外空间解决这一个问题。

你可以假设数组中的所有字符都是ASCII码表中的可打印字符。

示例1:

输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例2:

输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

解法一:通过双指针

class Solution {
    func reverseString(_ s: inout [Character]) {
        var low = 0
      var high = s.count - 1
      while low < high {
        s.swapAt(low, high)
        low += 1
        high -= 1
      }
    }
}

由于代码比较简单,不讲解,还有一种一行代码即可:

class Solution {
    func reverseString(_ s: inout [Character]) {
        s.reverse()
    }
}

通过这个题目,发现另一种很不错的解法,是通过三次异或操作来交换两个值:

 public void reverseString(char[] s) {
        int end = s.length - 1;
        int half = end / 2;
        for (int i = 0; i < half && end >= 0; ++i, --end) {
            s[i] ^= s[end];
            s[end] ^= s[i];
            s[i] ^= s[end];
        }
 }

我是只想到了第一种方法和简写版的,通过这个题目还是了解到了异或在交换值中的使用,希望对大家有所帮助!!!

原文地址:https://www.cnblogs.com/guohai-stronger/p/11746758.html