剑指offer——翻转单词顺序

来源:互联网 发布:csp软件下载 编辑:程序博客网 时间:2024/06/05 18:51

题目描述:

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


思想:

可以发现,要对一个句子进行翻转,可以先对整个句子进行翻转,之后再对每个单词进行翻转。而不论是返回句子还是翻转单词,都是对一个字符串进行翻转,所以可以实现一个翻转函数,对从start到end位置的字符进行翻转,直到start大于end的值。


代码实现:

public class Solution {    public String ReverseSentence(String str) {        if(str == null || str.length() == 0) return str;        //先翻转整个句子        char[] cs = str.toCharArray();        int begin = 0;        int end = cs.length -1;        reverse(cs, begin, end);        begin = end = 0;        //再翻转每个单词        while(begin<cs.length){            if(cs[begin]==' '){//如果第一个位置就遇到空格,说明不是一个有效的单次                begin++;                end++;            }else if(end == cs.length || cs[end] == ' '){                //当end为空时,说明一个单次的结束                reverse(cs,begin,--end);                begin = ++end;            }else{                //end没有遇到空格                end++;            }        }        return new String(cs);    }    private void reverse(char[] str,int begin,int end){        while(begin <=end){            char temp = str[begin];            str[begin] = str[end];            str[end] = temp;            begin++;            end--;        }    }   }
1 0
原创粉丝点击