本文主要是介绍剑指offer系列之四十四:翻转单词顺序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
可以发现,要对一个句子进行翻转,可以先对整个句子进行翻转,之后再对每个单词进行翻转。而不论是返回句子还是翻转单词,都是对一个字符串进行翻转,所以可以实现一个翻转函数,对从start到end位置的字符进行翻转,直到start大于end的值。所以实现句子翻转的代码如下(已被牛客AC):
package com.rhwayfun.offer;public class RotateSentence {public String ReverseSentence(String str) {if(str == null) 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--;}}public static void main(String[] args) {String str = "hello world";RotateSentence r = new RotateSentence();String s = r.ReverseSentence(str);System.out.println(s);}
}
这篇关于剑指offer系列之四十四:翻转单词顺序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!