20天刷题计划-344. 反转字符串

简介: 需要反转数组,且不允许生成新的数组,使用双指针的方法。思路如下:初始指针 left ,right 分别向字符串的开始和末尾,指针每次各移动一次,使左右指针慢慢靠近,每次交换左右指针指向的元素。循环结束情况如下:

一、题目描述:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

二、思路分析:

分析题目,注意点如下:

1.原地修改输入数组

  1. 复杂度为O(1)

需要反转数组,且不允许生成新的数组,使用双指针的方法。思路如下:

初始指针 left ,right 分别向字符串的开始和末尾,指针每次各移动一次,使左右指针慢慢靠近,每次交换左右指针指向的元素。循环结束情况如下:

  • 如果数组长度为奇数,最后跳出循环时 left == right,不用交换
  • 如果数组长度为偶数,最后跳出循环时 left > right,不用交换

三、AC 代码:

public void reverseString(char[] s) {
        int left = 0;
        int right = s.length -1 ;
        while (left < right) {
            char temp = s[left];
            s[left++] = s[right];
            s[right--] = temp;
        }
    }

四、总结:

这道题目太简单了,感觉基本没有什么思考就可以写出了。这道题应该放到计划中的双指针类型的第一题,可以给刷题者增加信息,感觉位置放置不太合理。应该由易到难逐步递进会好一点,不过对于个人成就感还是很有效果的。



相关文章
|
6月前
|
Java C++ 索引
leetcode-541: 反转字符串 II
leetcode-541: 反转字符串 II
47 0
|
1月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
14 0
|
1月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
20 0
|
6月前
反转字符串
反转字符串
44 1
|
6月前
|
Java C++ Python
leetcode-344:反转字符串
leetcode-344:反转字符串
37 1
|
算法 C++
在 C/C++ 中反转字符串的不同方法
给定一个字符串,编写一个 C/C++ 程序来反转它。
135 0
leetcode 344 反转字符串
leetcode 344 反转字符串
79 0
leetcode 344 反转字符串
leetcode 541 反转字符串II
leetcode 541 反转字符串II
56 0
leetcode 541 反转字符串II
|
机器学习/深度学习 算法 NoSQL
LeetCode:344. 反转字符串
题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
LeetCode 344. 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
57 0