从小白开始刷算法 双指针篇 leetcode.344

简介: 从小白开始刷算法 双指针篇 leetcode.344

344. 反转字符串


编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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”]


题目来源:力扣(LeetCode)


对撞双指针思路


能否写出:写出,但需要思路。

时间:10多分钟

这是一道非常基础的对撞双指针思路的题目,适合新手,也太大难度


初始化两个指针 leftright,分别指向字符数组的首尾元素。然后,通过交换指针所指向的元素,将字符数组进行反转。每次交换后,左指针向右移动一步,右指针向左移动一步,直到左指针超过右指针,表示反转完成。


例:

字符数组 s = ['h', 'e', 'l', 'l', 'o']

  1. 初始时,left = 0,right = 4。通过交换 s[left]s[right],得到 s = ['o', 'e', 'l', 'l', 'h']
  2. left 自增为 1,right 自减为 3,继续交换 s[left]s[right],得到 s = ['o', 'l', 'l', 'e', 'h']
  3. 以此类推,直到 left 超过 right,即完成了字符串的反转。
// 仅是我的思路代码,leetcode上大神更厉害
class Solution {
    public void reverseString(char[] s) {
        if(s.length<2){
            return;
        }
        int left = 0;
        int right = s.length-1;
        while (left<=right){
            //swap
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            //移动指针
            left++;
            right--;
        }
    }
}

时间复杂度: O(n)

空间复杂度:O(1)

相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
11天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
1月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
23 2
|
2月前
|
算法 索引 容器
双指针算法详解
本文介绍了双指针算法及其应用。双指针算法是在数组或字符串中常用的高效技术,通过维护两个指针遍历数据结构以解决特定问题。根据指针移动方向,可分为同向双指针、相向双指针和快慢指针。同向双指针如移动零和复写零问题;快慢指针如快乐数问题;相向双指针如盛水最多的容器、有效三角形数量及多数之和等问题。通过合理运用双指针技巧,可简化代码并提高效率。
61 4
双指针算法详解
|
1月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
51 6
|
3月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
50 1
|
3月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
60 1
|
3月前
|
算法 容器
【算法】双指针
【算法】双指针