LeetCode-344-反转字符串


题意描述:

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

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

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


示例:

示例一:

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

示例二:

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

解题思路:

Alice: 哈哈哈,这题目,直接 reverse 一下不就得了。
Bob: 就是不知道 reverse 方法是不是 O(1)的空间复杂度。而且这道题目应该就是想让我们实现 reverse方法的吧。
Alice: 那就直接把对应的字符送到指定位置呗,一步到位,直接交换对应位置的字符。比如说 s[0],s[len(s)-1] 交换,s[1],s[len(s)-2]交换,等等等等。
Bob: 那就直接循环一遍好了,做两个指针,一个是 x , 一个是 len(s) - 1 - x
Alice: 哈哈哈,也可以一个双指针啊,一个从 0 变大,从左往右,一个从 len(s)-1 变小,从右往左,直到两个指针相遇就好了。
Bob: 😎😎


代码:

Python 方法一:使用列表的 reverse 方法

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s.reverse()

Python 方法二:双指针法, 交换数组中两个对应位置上的字符,直到完成整个字符串的反转。

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        for x in range(0, len(s)//2):
            s[x], s[len(s) - 1 - x] = s[len(s) - 1 - x], s[x]
        

Java 方法二:双指针法,交换数组中两个对应位置上的字符,直到完成整个字符串的反转。

class Solution {
    public void reverseString(char[] s) {
        char tmp;
        // O(1) 的额外空间
        for(int i=0; i<s.length/2; ++i){
            // 每次交换前后的两个元素,直至将所有元素都反转过来。
            tmp  = s[i];
            s[i] = s[s.length - 1 - i];
            s[s.length -1 - i] = tmp;
        }
    }
}

易错点:

  • 下标 length - 1 - x 的字符 应与 下标 x 的字符交换位置,注意不要越界访问数组。

总结:

在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值