12力扣题做题笔记及复盘--344.反转字符串(字符串、双指针法)

344. 反转字符串 - 力扣(LeetCode)

题外话

这道题有在笔试题中出现,算是一道比较容易的开胃菜。

对于这道题目一些同学直接用C++里的一个库函数 reverse,调一下直接完事了, 相信每一门编程语言都有这样的库函数。

如果这么做题的话,这样大家不会清楚反转字符串的实现原理了。

但是也不是说库函数就不能用,是要分场景的。

如果在现场面试中,我们什么时候使用库函数,什么时候不要用库函数呢?

如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。

毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。

如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

建议大家平时在leetcode上练习算法的时候本着这样的原则去练习,这样才有助于我们对算法的理解。

思路

对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。

代码

class Solution {
    public void reverseString(char[] s) {
        int end = s.length-1;
        int start = 0;
        while(start<end){
            char temp = s[end];
            s[end] = s[start];
            s[start] = temp;
            end--;
            start++;
        }
    }
}

总结

数据的交换采用到了双指针法,比较快速的解决问题

在数据交换中,有两种交换方式

一:如我写的,用临时变量

二:就是通过位运算:

s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];
posted @ 2022-05-25 16:59  jason饼干大怪兽  阅读(34)  评论(0)    收藏  举报