zoukankan      html  css  js  c++  java
  • 翻转单词顺序列

    题目描述
    牛客最近来了一个新员工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;
    	}
    
  • 相关阅读:
    10个优秀HTML5网站案例赏析
    读书笔记之:More Exceptional C++ (2002) [++]
    函数模板与函数重载
    vector中元素的删除
    C++常用程序
    Linux下的示例程序
    要求或禁止在堆中产生对象
    读书笔记之:Effective C++ (2005)[++]
    读书笔记之:More Effective C++ (2007)[+]
    读书笔记之:Essential C++ (2001)[+]
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707668.html
Copyright © 2011-2022 走看看