Leetcode的AC指南 —— 字符串:344. 反转字符串

摘要:
Leetcode的AC指南 ------ 字符串:344. 反转字符串 。题目介绍:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

文章目录

一、题目


题目介绍:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

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

力扣题目链接

示例 1:

go 复制代码
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

go 复制代码
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

1 <= s.length <= 105

s[i] 都是 ASCII 码表中的可打印字符

二、解析


1、双指针法

go:

go 复制代码
func reverseString(s []byte)  {
    left := 0
	right := len(s) - 1
	for left < right {
		temp := s[left]
		s[left] = s[right]
		s[right] = temp
		left++
		right--
	}
}
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

其他语言版本


Java

java 复制代码
class Solution {
    public void reverseString(char[] s) {
        int l = 0;
        int r = s.length - 1;
        while (l < r) {
            s[l] ^= s[r];  //构造 a ^ b 的结果,并放在 a 中
            s[r] ^= s[l];  //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ b
            s[l] ^= s[r];  //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换
            l++;
            r--;
        }
    }
}

// 第二种方法用temp来交换数值更多人容易理解些
class Solution {
    public void reverseString(char[] s) {
        int l = 0;
        int r = s.length - 1;
        while(l < r){
            char temp = s[l];
            s[l] = s[r];
            s[r] = temp;
            l++;
            r--;
        }
    }
}

C++

cpp 复制代码
void reverseString(vector<char>& s) {
    for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {
        swap(s[i],s[j]);
    }
}

Python

python 复制代码
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        left, right = 0, len(s) - 1
        
        # 该方法已经不需要判断奇偶数,经测试后时间空间复杂度比用 for i in range(len(s)//2)更低
        # 因为while每次循环需要进行条件判断,而range函数不需要,直接生成数字,因此时间复杂度更低。推荐使用range
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
       
相关推荐
历程里程碑7 分钟前
LeetCode 560题:和为K子数组最优解
算法·哈希算法·散列表
qq_4017004122 分钟前
C/C++中的signed char和unsigned char详解
c语言·c++·算法
leoufung36 分钟前
LeetCode 67. Add Binary:从面试思路到代码细节
算法·leetcode·面试
无限进步_1 小时前
【C语言】循环队列的两种实现:数组与链表的对比分析
c语言·开发语言·数据结构·c++·leetcode·链表·visual studio
wjykp1 小时前
79~87逻辑回归f
算法·机器学习·逻辑回归
聆风吟º1 小时前
【顺序表习题|图解|双指针】合并两个有序数组 + 训练计划 I
c语言·数据结构·c++·经验分享·算法
程序员三藏1 小时前
自动化测试与功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
wa的一声哭了1 小时前
矩阵分析 方阵幂级数与方阵函数
人工智能·python·线性代数·算法·自然语言处理·矩阵·django
菩提祖师_1 小时前
基于MATLAB的心电信号处理与心律异常检测算法设计
算法·matlab·信号处理
foundbug9991 小时前
用ode45求解悬臂梁的动力学方程,得到其变形
算法