翻转单词顺序列 --剑指offer

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
 
思路: 先整体翻转 在逐个单词翻转
另外几种思路:1 逐个单词入栈 最后出栈
2 直接split分开单词 然后从后边拼接
3 第二个单词拼接到第一个单词前边 第三个在拼接到前边  
 
public class Solution {
    public  String ReverseSentence(String str) {
        if( str == null||str.trim().equals("")){
            return str;
        }
        char[] chars = str.toCharArray();
        int len=str.length();
        reverse(chars,0,len-1);
        int f=0,l=0;
        while (l < len){
            if(chars[l] == ' '){
                reverse(chars,f,l-1);
                l ++;
                f = l;
            }
            if(chars[f] == ' '){
                f ++;
            }
            if(chars[f] != ' ' && chars[l] != ' '){
                l ++;
            }
        }
        reverse(chars,f,l-1);
        return String.valueOf(chars);
    }

    private  void reverse(char[] chars, int begin, int end) {
        while(begin < end){
            char tem=chars[begin];
            chars[begin] = chars[end];
            chars[end] = tem;
            begin ++;
            end --;
        }
        return;
    }
    
}

 

posted @ 2020-03-10 16:09  nlw  阅读(110)  评论(0编辑  收藏  举报