剑指offerNo44. 翻转单词顺序列(Java)

房东的猫 提交于 2020-02-26 16:27:40

题目描述:

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

思路:

  • 先整体进行翻转,得到:tneduts a ma I.
  • 再分别将句子中的每个单词进行翻转,单词翻转可以用两个指针start和end指针,start指向单词的起点,end单词后的空格。

代码:

package offer01;

public class TestNo44 {
    public static void main(String[] args) {
        String a = "I am a student!";
        System.out.println(new TestNo44().ReverseSentence(a));

    }
    public String ReverseSentence(String str) {
        if(str == null || str.length() == 0){
            return str;
        }
        char[] array = str.toCharArray();
        reverse(array,0,array.length-1);
        int start = 0;//记录单词的起始位置
        int end = 0;//记录单词后面的空格,也就是单词的终止位置
        while (end<array.length){
            if(array[end] != ' '){
                //最后一个单词无空格,下面翻转的是最后一个单词
                if(end == array.length-1){
                    reverse(array,start,end);
                }
                end++;
                //当遇到空格的时候,将空格之前的单词进行翻转
            }else if(array[end] == ' '){
                reverse(array,start,end-1);
                end++;
                start = end;//下一个单词的起始位置
            }
        }
        return String .valueOf(array);
    }
    private void reverse(char[] array,int start,int end){
        char temp = ' ';
        while (start <end){
            temp = array[start];
            array[start++] = array[end];
            array[end--] = temp;
        }
    }
}

一切都会好的,城南的花都开了  ..

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!