Day3:反转字符串大锦集

反转全部

思路:比较简单的双指针算法。

反转前2k个中的k个

思路:比较绕,简单来说就是规定每2k个单位之中,反转前k个字符。一开始我没搞懂题目,直接以为是每隔2交换字符= = ,但是注意,涉及到单位个这种,也就意味着我们在做反转任务的时候要采取区间模式,借用上一题的代码,改一下参数列表

接下来,我们就要分析如何确保我们每一轮都是比较【0,2k-1】【2k,4k-1】.......

就要通过for循环中的i定义基准,

然后就是我们代码逻辑结构了:反转前k个字符,如果不够就反转全部

反转字符串的单词(偏难,涉及到空格)

用全部反转再局部反转的思路很难!!我写不出来,因为涉及到去除空格的操作

那就换一种思路:

一点细节:

  • s.trim(); // 删除首尾空格
  • substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的索引 beginIndex 开始,直到索引 endIndex - 1 处的字符。
  • stringBuilder->string
  • 在 最后返回 res.toString().trim() 而不是仅仅 res.toString() 的原因是为了确保最终返回的字符串不包含尾部的空格。

所以在收集答案的时候要(s.sustring(i+1,j+1)+" ");

class Solution {
    public String reverseWords(String s) {
        s = s.trim(); // 删除首尾空格
        int i=s.length()-1,j=i;
        StringBuilder res=new StringBuilder();
        while(i>=0&&j>=0){
            while(i>=0&&s.charAt(i)!=' ') i--;
            res.append(s.sustring(i+1,j+1)+" ");
            while(i>=0&&s.charAt(i)!=' ') i--;
            j=i;
        }

            return res.toString().trim(); // 转化为字符串并返回
    }

    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值