【劍指offer】替換空格
阿新 • • 發佈:2021-01-21
題目描述
請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
解題思路:先掃描一遍字串,統計出空格數,從而得出替換後的字串的長度。假設原字串為為s1,替換後的字串為s2,設定兩個指標p1,p2.開始時,p1指向原字串s1的末尾,p2指向替換後字串s2的末尾。然後從後往前對原字串進行掃描,如果p1遇到空格,那麼在s2中填入“%20”,如果遇到字元,那麼s2填入該字元。時間複雜度為O(Length),Length為替換後字串的長度。
Cpp Code
class Solution { public: void replaceSpace(char *str,int length) { int space_num=0,oldlen=0,newlen=0; if(str==NULL||length<=0){ return; } int i=0; while(str[i]!='\0'){//C/C++字串以‘\0’結尾 if(str[i]==' '){//統計空格數量 space_num++; } oldlen++; i++; } newlen=oldlen+space_num*2;//替換後的字串長度 int j=newlen; i=oldlen; while(i>=0&&j>i){//退出條件,j==i說明繼續掃描已不再需要替換,故j>i也可以是判斷條件,不要這個條件也可以 if(str[i]==' '){//空格,因為是從後往前掃描,故逆序填入 str[j--]='0'; str[j--]='2'; str[j--]='%'; } else{ str[j--]=str[i];//非空格直接填入 } i--;//指標向左移動 } } };
Java Code
public class Solution { public String replaceSpace(StringBuffer str) { //return str.toString().replace(" ","%20");//利用自帶函式 StringBuilder sb=new StringBuilder();//StringBuilder int len=str.length(); for(int i=0;i<len;i++){ if(str.charAt(i)==' '){ sb.append("%20"); } else{ sb.append(str.charAt(i)); } } return sb.toString(); } }