leecode151 反转字符串中的单词(附有手写思路)

丑陋的思路

c294dd873c1716a942f21df8f9b108d8_720.png

StringJoiner版本

前言

刚开始我是用StringJoiner写的,因为我看到这个每个元素之间有一个固定的空格我就想着能够直接用这个StringJoiner来进行书写,但是我提交的时候说这个StringJoiner无法识别,因为这个StringJoiner是java8之后才有的东西,于是我就决定用这个StringBuilder去做,但是后来我一想,不对啊,leecode不可能不支持java8啊,于是我才想到原来刷leecode题也是要导包的,不是单纯的写个函数就行了,

代码

leecode如果想要使用这个StringJoiner我们可以去导包

import java.util.StringJoiner;
class Solution {
    public String reverseWords(String s) {
        StringJoiner sj = new StringJoiner(" ");
        int length = s.length();
        int start=length-1,end=length-1;
        while(start>-1){
            //这样并没有排除最后一位是空格的情况
            while(end>-1&&s.charAt(end)==' '){
                end--;
                start=end;
            }
            if(end==-1){
                break;
            }
            while(start>-1&&s.charAt(start)!=' '){
                start--;
            }
            start++;
            sj.add(s.substring(start, end+1));
            end=start-1;  //让end更改位置,这样能够同时修改start的位置
        }
        return sj.toString();
    }
}

StringBuilder版本

package heima_study.day3;

import java.util.Scanner;
//import java.util.StringJoiner;

public class 反转字符串的单词151 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入这个字符串");
        String s = input.nextLine();
        String result = reverseWords(s);
        System.out.println(result);
        input.close();
    }
    public static String reverseWords(String s) {
        StringBuilder sj = new StringBuilder();
        int length = s.length();
        int start=length-1,end=length-1;
        while(start>-1){
            //这样并没有排除最后一位是空格的情况
            while(end>-1&&s.charAt(end)==' '){
                end--;
                start=end;
            }
            if(end==-1){
                break;
            }
            while(start>-1&&s.charAt(start)!=' '){
                start--;
            }
            start++;
            sj.append(s.substring(start, end+1)).append(" ");
            end=start-1;  //让end更改位置,这样能够同时修改start的位置
        }
        if(sj.length()>0){
            sj.setLength(sj.length()-1);
        }
        return sj.toString();
    
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值