Reverse Words in a String
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
开始这么写的,但是出现Time Limit Exceeded:
public class Solution {
    public String reverseWords(String s) {
        String result="";
		String[] splits=s.split(" ",-1);
		int tag=0;//标志现在还没有出现最末尾的单词
		for(int i=splits.length-1;i>=0;i--)
		{
			if(!splits[i].equals(""))
			{
				System.out.println(splits[i]);
				if(tag==0)//还没有单词被加到result
				{
					result=result+splits[i];
					tag=1;
				}
				else //之前已有单词加入result,剩余单词前面加空格
				{
					result=result+" "+splits[i];
				}
			}
		}
		return result;
    }
}后来程序改成如下,Accepted:
public class Solution {
    public String reverseWords(String s) {
        		StringBuffer result=new StringBuffer("");
		String[] splits=s.split(" ",-1);
		int tag=0;//标志现在还没有出现最末尾的单词
		for(int i=splits.length-1;i>=0;i--)
		{
			if(!splits[i].equals(""))
			{
				if(tag==0)//还没有单词被加到result
				{
					result=result.append(splits[i]);
					tag=1;
				}
				else //之前已有单词加入result,剩余单词前面加空格
				{
					result=result.append(" "+splits[i]);
				}
			}
		}
		return result.toString();
    }
}后来看答案:
public String reverseWords(String s) {
   StringBuilder reversed = new StringBuilder();
   int j = s.length();
   for (int i = s.length() - 1; i >= 0; i--) {
      if (s.charAt(i) == ' ') {
         j = i;
      } else if (i == 0 || s.charAt(i - 1) == ' ') {
         if (reversed.length() != 0) {
            reversed.append(' ');
         }
         reversed.append(s.substring(i, j));
      }
   }
   return reversed.toString();
}三种算法的区别在于使用的数据类型不同:String,StringBuffer,StringBuilder
区别如下:
String 类型是不可变的,当执行
String s="a"; String s=s+"b";
时,后一句又开辟了一块不同于前一句的空间,每一个看似修改String 的方法都创建了一个全新的String 对象,而最初的String 对象则丝毫未动,这样如果数据量较多时,空间消耗较大,容易造成Time Limit Exceeded错误。
StringBuffer 是可变的字符串,执行
StringBuffer s=new StringBuffer("a");
s.append("ssss");时,不是新开辟一块空间,而是在原有空间基础上继续连接字符串,比String 方式大大节省了空间。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号