翻转单词顺序列

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

方法一
看到这道题感觉不是很难,我的第一想法是通过字符串分割成数组,然后反向拼接数组中的值,然后就得到了反向的顺序。

	public String ReverseSentence(String str) {
		if(str.trim().equals("")){
			return str;
		}
		String[] a = str.split(" ");
		StringBuffer o = new StringBuffer();
		int i;
		for (i = a.length; i >0;i--){
			o.append(a[i-1]);
			if(i > 1){
				o.append(" ");
			}
		}
		return o.toString();
	}

方法二
依次从前往后一直读取,设置一个变量用来缓存读取的字符串,遇到空格之后就把之前读取到的压到结果的前面并添加上空格。最后当循环结束,如果那个用来读取的字符串不为空,那么就再把它压到结果前,这次就不用再结果的最前面加空格了。相比于第一个方法来说,这个方法的空间复杂度比较小。

	public String ReverseSentence_2(String str) {
		String res = "", tmp = "";
		for (int i = 0; i < str.length(); i++) {
			if(str.charAt(i) == ' ') {
				res = " " + tmp + res;
				tmp = "";
			}
			else {
				tmp += str.charAt(i);
			}
		}
		
		if(tmp.length() > 0) {
			res = tmp + res;
		}
		return res;
	}
posted @ 2019-03-30 19:54  如是说  阅读(237)  评论(0编辑  收藏  举报