• LeetCode算法题-Reverse Words in a String III(Java实现)


    这是悦乐书的第259次更新,第272篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第126题(顺位题号是557)。给定一个字符串,您需要反转句子中每个单词中的字符顺序,同时仍保留空格和初始单词顺序。例如:

    输入:“Let's take LeetCode contest”
    输出:“s'teL ekat edoCteeL tsetnoc”

    注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

    本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

    02 第一种解法

    将s按照空格拆分为字符串数组,然后对数组中的每一个元素做翻转,再以空格拼接,作为结果返回。

    public String reverseWords(String s) {
        String[] arr = s.split(" ");
        StringBuilder result = new StringBuilder();
        for (int i=0; i<arr.length; i++) {
            String ss = arr[i];
            StringBuilder sb = new StringBuilder(ss);
            sb.reverse();
            arr[i] = sb.toString();
            if (i == arr.length-1) {
                result.append(arr[i]);
            } else {
                result.append(arr[i]+" ");
            }
        }
        return result.toString();
    }
    

    03 第二种解法

    对于第一种解法我们还可以再优化下。

    public String reverseWords2(String s) {
        String[] arr = s.split(" ");
        StringBuilder result = new StringBuilder();
        for (String ss : arr) {
            result.append(new StringBuilder(ss).reverse().toString()+" ");
        }
        return result.toString().trim();
    }
    

    04 第三种解法

    我们也可以直接在字符串内部进行操作。将以空格分割开的单个单词为一个对象,对其中的字符进行互换。先将s转为字符数组,如果当前字符不为空格,索引就继续向后移动,直到遇到空格为止,此时我们获取了第一个单词组成的字符的起始索引,再使用一次循环,将其字符进行反转,然后将索引还原。最后将字符数组转为字符串返回即可。

    public String reverseWords3(String s) {
        char[] arr = s.toCharArray();
        for (int i=0; i<arr.length; i++) {
            if (arr[i] != ' ') {
                int j = i;
                while (i<arr.length && arr[i] != ' ') {
                    i++;
                }
                i--;
                int index = i;
                while (j < i) {
                    char temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                    j++;
                    i--;
                }
                i = index;
            }
        }
        return new String(arr);
    }
    

    05 小结

    算法专题目前已日更超过三个月,算法题文章126+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

  • 相关阅读:
    bzoj4128 Matrix 矩阵 BSGS
    bzoj4002 [JLOI2015]有意义的字符串 特征根+矩阵快速幂
    bzoj2476 战场的数目 矩阵快速幂
    bzoj2306 [Ctsc2011]幸福路径 倍增 Floyd
    bzoj2085 [Poi2010]Hamsters 矩阵快速幂+字符串hash
    bzoj1875 [SDOI2009]HH去散步 矩阵快速幂
    bzoj1706 [usaco2007 Nov]relays 奶牛接力跑 矩阵快速幂
    什么是P问题、NP问题和NPC问题[转]
    ExFenwickTree
    CF 816 E. Karen and Supermarket
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/10429013.html
Copyright © 2020-2023  润新知