04字符串:151、翻转字符串里的单词

本文介绍了如何使用Java编程语言中的StringBuilder类,通过先整体反转字符串,再利用双指针技术逐个单词反转的方法,实现翻转字符串中的单词顺序。
摘要由CSDN通过智能技术生成

151、翻转字符串里的单词


重点:能够灵活运用字符串反转

  • 先整体反转,再局部反转(双指针)

方法一:先整体反转,再局部反转

        public String reverseWords(String s) {

            //移动空格
            StringBuilder sb = removeBlankSpace(s);
            //反转整个字符串
            reverseString(sb, 0, sb.length() - 1);
            //翻转单词
            reverseEachWord(sb);
            return sb.toString();
        }

        /**
         * 去除空格
         */
        public StringBuilder removeBlankSpace(String s) {
            int start = 0, end = s.length() - 1;
            //去除首位空格
            while (s.charAt(start) == ' ') start++;
            while (s.charAt(end) == ' ') end--;

            //存放结果
            StringBuilder sb = new StringBuilder();
            //去除中间的重复空格  必须相等,否则奇数会少判断一个字符
            while (start <= end) {
                char s1 = s.charAt(start);
                //添加进的条件是,该数字不为空格 或者 是空格但是前一个数字不是空格
                if (s1 != ' ' || sb.charAt(sb.length() - 1) != ' ') {
                    sb.append(s1);
                }
                start++;
            }
            return sb;
        }

        /**
         * 翻转字符串(字符串)
         */
        public void reverseString(StringBuilder sb, int start, int end) {
            while (start < end) {
                char tmp = sb.charAt(start);
                sb.setCharAt(start, sb.charAt(end));
                sb.setCharAt(end, tmp);
                start++;
                end--;
            }

        }

        /**
         * 反转单词(双指针)
         */
        public void reverseEachWord(StringBuilder sb) {
            //遇到空格就进行翻转 start
            int start = 0, end = 1;

            while (start < sb.length()) {
                //遇到空格或者跑到最后一位
                while (end < sb.length() &&sb.charAt(end) != ' '  ) {
                    end++;
                }
                reverseString(sb, start, end - 1);
                start = end + 1;
                end = start + 1;

            }
        }
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值