剑指Offer44:翻转单词顺序列(java)

参考牛客“魅影骑士”的解答:https://www.nowcoder.com/questionTerminal/3194a4f4cf814f63919d0790578d51f3?f=discussion

思路分析:

翻转单词顺序,
先翻转单词部分,后翻转整个句子和先翻转句子再翻转单词,效果一样。
我是先反转句子,然后翻转单词。思路是把字符串转成数组,写一个翻转方法(能够把指定区域的数组元素翻转,参数是:数组名,起始坐标,结束坐标)调用翻转方法输入参数把整个句子翻转,然后遍历数组用两个变量记录一个单词的范围坐标,调用翻转方法翻转单词。

题目描述

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

Java代码:

public class Solution {
    public String ReverseSentence(String str) {
        char []res=str.toCharArray();
        int len=str.length();
        Reverse(res,0,len-1);
        int temp=0;//记录单词起始坐标
        for(int i=0;i<len;i++){
            if(res[i]==' '){//当i遇到空格时,说明一个单词结束了
                Reverse(res,temp,i-1);
                temp=i+1;//更新单词的起始坐标
            }
            else if(i==len-1){//当i指向最后一个字符时,说明整个句子结束了,也即最后一个单词结束了。
                Reverse(res,temp,i);
            }
        }
        String result="";
        for(int i=0;i<len;i++){//遍历数组把数组转成字符串。
            result+=res[i];
        }
        return result;
    }
    
    public static void Reverse(char[]arr,int i,int j){ //翻转函数
        while(i<=j){
            char temp=arr[i];
            arr[i++]=arr[j];
            arr[j--]=temp;
        }
    }
}
posted @ 2020-02-02 15:52  31楼下小黑  阅读(185)  评论(0编辑  收藏  举报