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"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

解题思路

在这里可以使用异或(XOR)来实现不创建临时变量的交换方法。

因为:

1、异或满足交换律

2、异或满足结合律

3、A^A=0

举例:

代码

java 复制代码
class Solution {
    public void reverseString(char[] s) {
        // 定义左右指针
        int left = 0;
        int right = s.length - 1;

        while(left<=right){
            // 创建临时变量
            char temp;
            temp = s[left];
            s[left++] = s[right];
            s[right--] = temp;
        }
        
    }
}

使用异或:

java 复制代码
class Solution {
    public void reverseString(char[] s) {
        // 定义左右指针
        int left = 0;
        int right = s.length - 1;

        while(left < right){
            // 使用异或此处不能取等 否则A^A=0
            s[left] ^= s[right];
            s[right] ^= s[left];
            s[left++] ^= s[right--];
        }
        
    }
}
相关推荐
小雨下雨的雨40 分钟前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.3 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*4 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬5 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi86 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术6 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
想吃火锅10057 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
net3m338 小时前
一阶软件低通滤波器算法
人工智能·算法
水木流年追梦8 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt