zoukankan      html  css  js  c++  java
  • 剑指Offer-44.翻转单词顺序列(C++/Java)

    题目:

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

    分析:

    这道题的原理和剑指Offer-43.左旋转字符串(C++/Java)类似,先将字符串整体翻转一次,然后根据空格划分单词,将每个单词翻转一次即可得到答案。

    程序:

    C++

    class Solution {
    public:
        string ReverseSentence(string str) {
            myReverse(str, 0, str.size()-1);
            int index = 0;
            int l = 0;
            while(index < str.size()){
                if(str[index] == ' '){
                    myReverse(str, l, index-1);
                    l = index + 1;
                }
                else if(index == str.size()-1){
                    myReverse(str, l, index);
                    break;
                }
                index++;
            }
            return str;
        }
        void myReverse(string &str, int l, int r){
            if(l > str.size()-1 || r < 0)
                return;
            while(l < r){
                swap(str[l], str[r]);
                l++;
                r--;
            }
        }
    };

    Java

    public class Solution {
        public String ReverseSentence(String str) {
            StringBuilder s = new StringBuilder(str);
            myReverse(s, 0, s.length()-1);
            int l = 0;
            int r = 0;
            while(r < s.length()) {
                if(s.charAt(r) == ' '){
                    myReverse(s, l, r-1);
                    l = r + 1;
                }
                else if(r == s.length()-1){
                    myReverse(s, l, r);
                    break;
                }
                r++;
            }
            return s.toString();
        }
        public static void myReverse(StringBuilder str, int l, int r) {
            if(r < 0 || l > str.length()-1)
                return;
            while(l < r) {
                swap(str, l, r);
                l++;
                r--;
            }
        }
        public static void swap(StringBuilder str, int l, int r) {
            char temp = str.charAt(l);
            str.setCharAt(l, str.charAt(r));
            str.setCharAt(r, temp);
        }
    }
  • 相关阅读:
    vuex详解
    es6 数组方法的扩展
    es6class语法和继承
    变量的解构赋值
    es6变量let
    前端模块化
    webpack基础
    react中的redux(入门)
    react-router-dom中的BrowserRouter和HashRouter和link与Navlink
    react-router-dom
  • 原文地址:https://www.cnblogs.com/silentteller/p/12069918.html
Copyright © 2011-2022 走看看