剑指offer—58.翻转单词顺序列—分析及代码(Java)

news/2025/2/21 13:13:49

剑指offer——58.翻转单词顺序列——分析及代码[Java]

  • 一、题目
  • 二、分析及代码
    • 1. 两次翻转
      • (1)思路
      • (2)代码
      • (3)结果
    • 2. 直接拼接
      • (1)思路
      • (2)代码
      • (3)结果
  • 三、其他

一、题目

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

二、分析及代码

1. 两次翻转

(1)思路

先翻转各个单词,再对整个句子进行二次翻转,即实现目标。

(2)代码

public class Solution {
    public String ReverseSentence(String str) {
        if (str.trim().equals(""))
            return str;
        
        char[] chstr = str.toCharArray();
        int l = 0, length = str.length();
        for (int i = 0; i < length; i++) {
            if (chstr[i] == ' ') {
                Reverse(chstr, l, i - 1);
                l = i + 1;
            }
            if (i == length - 1 && l < i)
                Reverse(chstr, l, length - 1);
        }
        
        Reverse(chstr, 0, length - 1);
        return String.valueOf(chstr);
    }
    
    public void Reverse(char[] chstr, int l, int r) {
        int m = (l + r) >> 1;
        for (int i = l; i <= m; i++) {
            char temp = chstr[i];
            chstr[i] = chstr[l + r - i];
            chstr[l + r - i] = temp;
        }
        return;
    }
}

(3)结果

运行时间:21ms,占用内存:9648k。

2. 直接拼接

(1)思路

如果允许使用辅助空间,直接对原字符串进行拼接即可。

(2)代码

public class Solution {
    public String ReverseSentence(String str) {
        if (str.trim().equals(""))
            return str;
        String[] substr = str.split(" ");
        String ans = substr[substr.length - 1];
        for (int i = substr.length - 2; i >= 0; i--)
            ans = ans.concat(" " + substr[i]);
        return ans;
    }
}

(3)结果

运行时间:20ms,占用内存:9360k。

三、其他

暂无。


http://www.niftyadmin.cn/n/616352.html

相关文章

剑指offer—58_2.左旋转字符串—分析及代码(Java)

剑指offer——58_2.左旋转字符串——分析及代码[Java]一、题目二、分析及代码1. 两次翻转&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果2. 直接拼接&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&…

剑指offer—59.滑动窗口的最大值—分析及代码(Java)

剑指offer——59.滑动窗口的最大值——分析及代码[Java]一、题目二、分析及代码1. 辅助队列&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 给定一个数组和滑动窗口的大小&#xff0c;找出所有滑动窗口里数值的最…

剑指offer—61.扑克牌顺子—分析及代码(Java)

剑指offer——61.扑克牌顺子——分析及代码[Java]一、题目二、分析及代码1. 判断间隔&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一…

剑指offer—62.孩子们的游戏(圆圈中最后剩下的数)—分析及代码(Java)

toc 一、题目 每年六一儿童节&#xff0c;牛客都会准备一些小礼物去看望孤儿院的小朋友&#xff0c;今年亦是如此。HF作为牛客的资深元老&#xff0c;自然也准备了一些小游戏。其中&#xff0c;有个游戏是这样的&#xff1a;首先&#xff0c;让小朋友们围成一个大圈。然后&am…

剑指offer—64.求1+2+3+...+n—分析及代码(Java)

剑指offer——64.求123...n——分析及代码[Java]一、题目二、分析及代码1. 递归&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 求 123…n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case 等…

剑指offer—65.不用加减乘除做加法—分析及代码(Java)

剑指offer——65.不用加减乘除做加法——分析及代码[Java]一、题目二、分析及代码1. 二进制运算&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内…

剑指offer—66.构建乘积数组—分析及代码(Java)

剑指offer——66.构建乘积数组——分析及代码[Java]一、题目二、分析及代码1. 辅助乘积数组&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 给定一个数组A[0,1,…,n-1]&#xff0c;请构建一个数组B[0,1,…,n-1]&a…

剑指offer—补充1.跳台阶—分析及代码(Java)

剑指offer——补充1.跳台阶——分析及代码[Java]一、题目二、分析及代码1. 动态规划&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果三、其他一、题目 一只青蛙一次可以跳上 1 级台阶&#xff0c;也可以跳上 2 级。求该青蛙跳上一个…