力扣每日一题(第四天)

题目如下

在这里插入图片描述
题目要求:
1.字母之间要有空格
2.单词倒序
3.反转后两端不能有空格
4.反转后内部不能有多余空格

参考力扣官方解析:
1.使用内部函数实现
使用 split 将字符串按空格分割成字符串数组;
使用 reverse 将字符串数组进行反转;
使用 join 方法将字符串数组拼成一个字符串。

代码如下:
List <String> 是非定长的字符串。

static public String huiwen2(String a){
        a = a.trim();
        // 正则匹配连续的空白字符作为分隔符分割
        List<String> wordList = Arrays.asList(a.split("\\s+"));
        Collections.reverse(wordList);
        return String.join(" ", wordList);

    }

2.自己的想法
1.首先先去掉两边空格(用trim()方法)
2.转为数组,如何发现空格 把空格前的归为一个单词(stringBuffer 类)
3.倒置(参考官方解释,用的双端队列)

static public String fanzhuan(String a) {
        Deque<String> d = new ArrayDeque();
        a = a.trim();//去掉两边空格
        StringBuffer c = new StringBuffer();
        char[] b  = a.toCharArray(); //转为字符数组
        for (int i=0;i<a.length();i++){
            if (b[i]!=' ')
            {
                c.append(b[i]) ;

            }
            else if ((c.length() != 0) && (b[i] == ' ')){

                d.offerFirst(c.toString());  //将第一个单词放入双端队列
                c.setLength(0);//将c置为 什么都没有,准备存下一个单词
               
            }
        }
        d.offerFirst(c.toString());//将指定元素插入此双端队列的开头。(最后一个单词的插入)

        return String.join(" ", d);


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值