劍指offer編程題Java實現——替換空格。本站提示廣大學習愛好者:(劍指offer編程題Java實現——替換空格)文章只能為提供參考,不一定能成為您想要的結果。以下是劍指offer編程題Java實現——替換空格正文
1 package Solution; 2 3 /** 4 * 劍指offer面試題4:替換空格 5 * 題目:請事先一個函數,把字符串中的每個空格替換成"%20"。 6 * 例如輸入"We are happy.",則輸出"We%20are%20happy."。 7 * @author GL 8 * 9 */ 10 public class No4ReplaceSpace { 11 12 public static void main(String[] args) { 13 String string1="We are happy."; 14 String string2=" We are happy. "; 15 String string3="Wearehappy."; 16 //String string4=null; 17 String string5=""; 18 String string6=" "; 19 String string7=" "; 20 System.out.println(replaceSpace(string1.toCharArray())); 21 System.out.println(replaceSpace(string2.toCharArray())); 22 System.out.println(replaceSpace(string3.toCharArray())); 23 //System.out.println(replace(string4.toCharArray())); 24 System.out.println(replaceSpace(string5.toCharArray())); 25 System.out.println(replaceSpace(string6.toCharArray())); 26 System.out.println(replaceSpace(string7.toCharArray())); 27 System.out.println(replaceSpace(new StringBuffer(string1))); 28 System.out.println(replaceSpace(new StringBuffer(string2))); 29 System.out.println(replaceSpace(new StringBuffer(string3))); 30 //System.out.println(replaceSpace(new StringBuffer(string4))); 31 System.out.println(replaceSpace(new StringBuffer(string5))); 32 System.out.println(replaceSpace(new StringBuffer(string6))); 33 System.out.println(replaceSpace(new StringBuffer(string7))); 34 } 35 36 /* 37 * 時間復雜度為O(n)的解法:利用數組從後向前替換 38 * 1、先遍歷一次字符串,統計出要替換的字符的個數 39 * 2、創建新的臨時數組,數組長度為初始字符串字符個數+替換每個字符多出來的字符個數*要替換的字符個數 40 * 3、從原來字符串數組後面開始向前進行復制、替換到臨時數組。兩個數組下標變量分別為原始字符數組長度-1,臨時數組長度-1 41 * 4、原始字符數組的字符如果不為空格,則把這個字符復制到臨時數組的對應位置,兩個數組下標都減1 42 * 5、原始字符數組的字符如果為空格,則把臨時數組相對應的位置從後向前依次寫入替換的字符,臨時數組下標減少相應的替換的字符數量 43 * 6、循環復制替換,直到初始數組的下標小於0,此時替換完畢,臨時數組轉換成字符串後返回 44 */ 45 public static String replaceSpace(char[] string){ 46 if(string==null) 47 return null; 48 int originalLength=string.length; 49 int spaceCount=0; 50 for(int i=0;i<originalLength;i++){ 51 if(string[i]==' ') 52 spaceCount++; 53 } 54 int newLength=originalLength+2*spaceCount; 55 char[] temp=new char[newLength]; 56 int i=originalLength-1; 57 int j=newLength-1; 58 while(i>=0){ 59 if(string[i]==' '){ 60 temp[j]='0'; 61 temp[j-1]='2'; 62 temp[j-2]='%'; 63 j=j-3; 64 }else{ 65 temp[j]=string[i]; 66 j=j-1; 67 } 68 i=i-1; 69 } 70 return new String(temp); 71 } 72 73 /* 74 * 時間復雜度為O(n),利用StringBuffer實現 75 * 通過indexOf(String str,int fromIndex)方法和subSequence(int start,int end)方法聯合實現 76 */ 77 public static String replaceSpace(StringBuffer str){ 78 if(str==null) 79 return null; 80 int fromIndex=0; 81 int index=0; 82 StringBuffer temp =new StringBuffer(); 83 while(index<=str.length()){ 84 index=str.indexOf(" ",fromIndex); 85 if(index>=0){ 86 temp.append(str.subSequence(fromIndex, index)).append("%20"); 87 index=index+1; 88 fromIndex=index; 89 }else{ 90 temp.append(str.substring(fromIndex, str.length())); 91 break; 92 } 93 } 94 return temp.toString(); 95 } 96 97 }