1. 程式人生 > >劍指Offer每日一刷 -2017年11月11日

劍指Offer每日一刷 -2017年11月11日

題目描述

請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
方法一:使用JDK API進行替換
public class ReplaceBackspace {

	    public String replaceSpace(StringBuffer str) {
	    	String string = str.toString();
	    	String replace = string.replace(" ", "%20");
	    	return replace;
	    }

}
方法二: /* 問題1:替換字串,是在原來的字串上做替換,還是新開闢一個字串做替換! 問題2:在當前字串替換,怎麼替換才更有效率(不考慮java裡現有的replace方法)。 從前往後替換,後面的字元要不斷往後移動,要多次移動,所以效率低下 從後往前,先計算需要多少空間,然後從後往前移動,則每個字元只為移動一次,這樣效率更高一點。 思路是:1.先計算出str中有多少個 空格; 2.計算出將空格替換成"%20"後,str的長度newLength 3.設定str的長度為newLength,長度會增加,新增加的長度沒有值 4.對str按照原有長度從後向前遍歷,將每個字母按照新的長度從後向前進行賦值,
賦值到後面之後字母所在的原位置就可以被其他符號佔用,且不會影響到原有的字元。 5.遇到空格後,插入'0','2','%' */
 public String replaceSpace(StringBuffer str){
	    	//統計str中的space個數
	    	int spaceNum = 0; //記錄space的個數
	    	for(int i=0;i < str.length();i++){
	    		if(str.charAt(i) == ' '){ //判斷i索引處的char字元是否是' '
	    			spaceNum ++;
	    		}
	    	}
	    	
	    	int oldLength = str.length();
	    	int newLength = str.length()+ spaceNum*2; //%20佔有三個字元才長度,所以在原有的space的基礎上新增spaceNum*2
	    	
	    	int oldIndex  = oldLength-1;
	    	int newIndex = newLength-1;
	    	
	    	//StringBuffer newStr;
	    	str.setLength(newLength);
	    	//對已有的str從後向前遍歷,遇到 ' '時 插入'%', '2','0'
	    	for(;oldIndex>=0 && oldIndex < newLength;--oldIndex){
	    		if(str.charAt(oldIndex) == ' '){
	    			str.setCharAt(newIndex--,'0');
	    			str.setCharAt(newIndex--, '2');
	    			str.setCharAt(newIndex--, '%');
	    		}else{
	    			str.setCharAt(newIndex--, str.charAt(oldIndex));
	    		}
	    	}
	    	return str.toString();
	    	
	    }
方法三:
 public static String replaceSpace(StringBuffer str){
		   if(str==null)
		   {return "%20";}
		   		 
		   char[] ss = str.toString().toCharArray();
		   StringBuffer sb = new StringBuffer();
		   for(int i=0;i<ss.length;i++){
			   if(ss[i] == ' '){
				   sb.append("%20");
			   }else{
				   sb.append(ss[i]);
			   }
		   }
		   return sb.toString();
	   }