翻转单词顺序列 --剑指offer
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路: 先整体翻转 在逐个单词翻转
另外几种思路:1 逐个单词入栈 最后出栈
2 直接split分开单词 然后从后边拼接
3 第二个单词拼接到第一个单词前边 第三个在拼接到前边
public class Solution { public String ReverseSentence(String str) { if( str == null||str.trim().equals("")){ return str; } char[] chars = str.toCharArray(); int len=str.length(); reverse(chars,0,len-1); int f=0,l=0; while (l < len){ if(chars[l] == ' '){ reverse(chars,f,l-1); l ++; f = l; } if(chars[f] == ' '){ f ++; } if(chars[f] != ' ' && chars[l] != ' '){ l ++; } } reverse(chars,f,l-1); return String.valueOf(chars); } private void reverse(char[] chars, int begin, int end) { while(begin < end){ char tem=chars[begin]; chars[begin] = chars[end]; chars[end] = tem; begin ++; end --; } return; } }