【教程】数据结构和算法的三种实现方式

1,使用StringBuilder解决
对于字符串从右往左遍历,根据空格找出单词,把它加入到StringBuilder中,原理比较简单,看下代码

    public String reverseWords(String s) {
        StringBuilder stringBuilder = new StringBuilder();
        int right = s.length() – 1;
        int left = right;
        while (left >= 0) {
            //过滤掉空格
            while (right >= 0 && s.charAt(right) == ‘ ‘)
                right–;
            left = right;
            while (left >= 0 && s.charAt(left) != ‘ ‘)
                left–;
            //截取单词,然后把它加入到StringBuilder中,然后加个空格
            stringBuilder.append(s.substring(left + 1, right + 1) + ” “);
            //下一个单词开始的位置
            right = left;
        }
        //转化为字符串,并去掉最后加的空格
        return stringBuilder.toString().trim();
    }

2,使用正则匹配
使用正则匹配把字符串根据空格拆分成一个个的单词,这中间可能有空字符串。然后把这些单词放到StringBuilder中,如果遇到空字符串就跳过。

    public String reverseWords(String s) {
        //通过正则匹配根据空格把它转化为字符串数组
        String[] split = s.trim().split(” “);
        StringBuilder stringBuilder = new StringBuilder();
        //从后往前遍历这个转化的数组
        for (int i = split.length – 1; i >= 0; i–) {
            //如果是空字符串直接跳过
            if (split[i].trim().length() == 0)
                continue;
            stringBuilder.append(split[i] + ” “);
        }
        return stringBuilder.toString().trim();
    }

3,解法三
还可以换个写法,原理都差不多

    public String reverseWords(String s) {
        String[] split = s.trim().split(“\\s+”);
        Collections.reverse(Arrays.asList(split));
        return String.join(” “, split);
    }

我把部分算法题整理成了PDF文档,截止目前总共有900多页,大家可以下载阅读
链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666

作者:sdwwld
链接:https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/solution/shu-ju-jie-gou-he-suan-fa-3chong-shi-xia-xkmd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享