面向小白的力扣344. 反转字符串

168 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

今天,我们继续搞算法。

题目描述

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

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

image.png

题目分析

这个题目是让我们反转字符串,我们如果不知道怎么设计的话,可以看例子,例子里是:输入: s = ["h","e","l","l","o"],然后输出就是最后一个位置的跑到第一个位置,倒数第二个位置跑到第二个位置,到中间就停止,结束程序。

那既然是位置移动,我们最容易想到的是互换模板,a和b互换,怎么换呢?我们需要把a保存,然后把b的值给a,a的值就是b,这就是为什么我们还要把a进行保存,不保存的话就覆盖了,然后再把保存的值给b。

解题思路

  • 确定操作对象:本题中,操作数组就1个char[] s
  • 确定操作条件:遍历一半就返回。
  • 确定操作过程:将倒数第1个位置的字符与正数第一个字符互换位置,然后两个指针同时移动。
  • 确定结果返回:无返回。

代码

class Solution {
    public void reverseString(char[] s) {
               int cmt = s.length-1;
               int count = s.length/2;
         for (int i =0;i<s.length;i++){
             char temp = s[i];
             s[i] = s[cmt];
             s[cmt] =temp;
             if(i == count-1){
                 return;
             }
              cmt--;
         }
    }
 }

总结

这是一道简单题目,我觉得题目本身不是很难,而且也比较容易想,关键是在设计算法的时候要考虑清楚情况,最好是结合几个例子,就可以写出来了。