zoukankan      html  css  js  c++  java
  • 剑指Offer_44_翻转单词顺序列

    题目描述

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

    解题思路

    1. 解法1
      翻转整个字符串后,对每个单词进行翻转,或者先翻转每个单词,再翻转整个字符串。

    2. 解法2
      将字符串按空格分隔,然后对数组按从后到前从新组成字符串(或者翻转字符串数组)。

    实现

    • 解法1
    public class Solution {
        public String ReverseSentence(String str) {
            if (str == null || !str.contains(" ")) return str;
            char[] array = str.toCharArray();
            reverse(array, 0, array.length - 1);
    
            int begin = 0;
            int end = 0;
            for (int i = 0; i < array.length; i++){
                if (array[i] == ' '){
                    reverse(array, begin, end - 1);
                    begin = end = i + 1;
                }else {
                    end ++;
                }
            }
    
            if (begin < array.length && end <= array.length) reverse(array, begin, end - 1);
    
            return String.valueOf(array);
        }
    
        private void reverse(char[] array, int start, int end) {
            while (start < end){
                char t = array[start];
                array[start++] = array[end];
                array[end--] = t;
            }
        }
    
    }
    
    • 解法2
    public class Solution {
        public String ReverseSentence(String str) {
           if (str == null || !str.contains(" ")) return str;
            String[] split = str.split(" ");
    
            StringBuilder sb = new StringBuilder();
    
            for (int i = split.length - 1; i >=0; i--){
                if (i != split.length - 1) {
                    sb.append(" ");
                }
                sb.append(split[i]);
            }
            
            if (sb.length() == 0) sb.append(str); //处理只有一个空格情况
    
            return sb.toString(); 
        }
    }
    
  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5798529.html
Copyright © 2011-2022 走看看