字符串:翻转单词顺序

…衆ロ難τιáo~ 提交于 2020-08-08 12:21:41

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

思路:

先全部翻转,如i am students.-->.stneduts ma i ,然后再局部翻转,遇到空格就翻转这个单词。

代码:

public class Solution {
    public String ReverseSentence(String str) {
        if(str==null ||str.length()==0) return str; //不能返回null
        //先转换为char,然后全部翻转
        char[] s=str.toCharArray();
        rev(s,0,s.length-1);
        //局部翻转
        int l=0;
        int r=0;
        while(l<s.length){
            if(s[r]==' '){
                rev(s,l,r-1);
                //跳过空格继续遍历下一单词
                r++;
                l=r;
            }
            //到了最后,翻转完就break,要不然r就越界了
            if(r==s.length-1){
                rev(s,l,r);
                break;
            }
            ++r;
        }
        return String.valueOf(s);
    }
    public void rev(char[] s,int l,int r){
        while(l<r){
            char temp=s[l];
            s[l]=s[r];
            s[r]=temp;
            l++;
            r--;
        }
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!