代码随想录算法训练营第八天 | 344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词 、 剑指Offer58-II.左旋转字符串

344.反转字符串-Temp交换

题目链接/文章讲解/视频讲解:代码随想录

(1)思路总结

(2)代码

--New

541. 反转字符串II-Temp交换

题目链接/文章讲解/视频讲解:代码随想录

(1)思路总结

(2) 代码

--New 

剑指Offer 05.替换空格  --数组填充、双指针

题目链接/文章讲解:代码随想录

(1)思路总结

        如果想把这道题目做到极致,就不要只用额外的辅助空间了!首先扩充数组到每个空格替换成"%20"之后的大小。然后从后向前替换空格,也就是双指针法,过程如下:i指向新长度的末尾,j指向旧长度的末尾。

        为什么要从后向前填充,从前向后填充不行么?从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素向后移动。

        其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

        这么做有两个好处:

                · 不用申请新数组。

                · 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。

(2)代码

--New

151.翻转字符串里的单词

题目链接/文章讲解/视频讲解:代码随想录

(1)思路总结

(2) 代码

--New

 

 for(int end=0;end<=chars.length;end++){

            if(end==chars.length || chars[end]==' '){

                reverse(chars,start,end);

                start=end+1;}

  }

//end到底能不能取到chars.length很重要。但是要保证对chars[end]==' '也适用,因此end==chars.length-1不行,reverse(chars,start,end)就不能都用end统一了。

 

剑指Offer58-II.左旋转字符串-先反转前n个后反转n到末尾最后反转整个字符串

题目链接/文章讲解:代码随想录

(1)思路总结

(2) 代码

--New

其他补充

  1. //自己定义的交换字符的函数,遵循左闭右开

        public void reverse(char[] ch,int i,int k){

            for(int j=k-; i<j ; i++,j--){

                char temp=ch[i];

                ch[i]=ch[j];

                ch[j]=temp;}

       }

  2. char[] ch=s.toCharArray();   //string转为char数组

  3. for(int i=0;i<ch.length;i+=2*k)  //打破刻板印象,不是每次都是i++,这里i每次跳2k的距离

  4. return new String(ch);  //最后返回需要返回字符串,而现在是字符数组

  5. StringBuilder 只是拼接字符串的手段,最终的目的还是要恢复成 String 类型

    StringBuilder stb = new StringBuilder();

    String str = stb.toString();

  6. s += str.toString();  //字符串可以直接通过‘+’号拼接

  7. System.arraycopy(chars,0,newchars,0,slow);

    public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)  // src:源数组;  srcPos:源数组要复制的起始位置;  dest:目的数组;  destPos:目的数组放置的起始位置;  length:复制的长度. 

  8. 在Java中,reverse是用于反转字符串的方法,它是StringBuilder和StringBuffer类的一个成员方法。

    StringBuilder sb=new StringBuilder(s);

    return sb.reverse().toString();

  9. char temp=sb.charAt(start); //string和StringBuilder都可以根据下标获得相应字符

    sb.setCharAt(start,sb.charAt(end));  //StringBuilder更改对应下标的字符setCharAt(位置,值)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值