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