小景哥哥

世界很大,而我们还需要再成长!

您现在的位置是:首页>爱编程>详细内容

44.翻转单词顺序列

发布时间:2018-08-24 00:00:00编辑:Jason浏览(287)评论(0)

    44.翻转单词顺序列

    题目描述

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


    public class Solution {
        //利用java中String函数,简单明了
        public String ReverseSentence1(String str) {
            if(str.trim().isEmpty())
                return str;
            String[] temp = str.split(" ");
            String res = "";
            int i = temp.length - 1;
            for(; i > 0; i--){
                res = res + temp[i] + " ";
            }
            return res + temp[0];
        }
        //利用剑指offer上思想,两次反转字符串
        public String ReverseSentence(String str) {
            if(str.trim().isEmpty())
                return str;
            char[] c = str.toCharArray();
            Reverse(c, 0, c.length - 1);
            int pBegin = 0, pEnd = 0;
            while(pBegin < c.length){
                if(c[pBegin] == ' '){
                    pBegin++;
                    pEnd++;
                }else if(c[pEnd] == ' '){
                    Reverse(c, pBegin, pEnd - 1);
                    pBegin = ++pEnd;
                }else if(pEnd == c.length - 1){
                    Reverse(c, pBegin, pEnd);
                    pBegin = ++pEnd;
                }else
                    pEnd++;
            }
            return String.valueOf(c);
        }
        public static void Reverse(char[] c, int begin, int end){
            if(begin >= end)
                return;
            while(begin < end){
                char temp = c[begin];
                c[begin] = c[end];
                c[end] = temp;
                begin++;
                end--;
            }
        }
        
    }

关键字词:offer

上一篇:43.左旋转字符串

下一篇:45.扑克牌顺子