劍指Offer(2)替換空格
阿新 • • 發佈:2018-11-27
題目描述
請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
解題思路
字串操作,需要將字串的空格換為“%20”,最先想到的從頭到尾來進行便利,如果遇到空格的話,就將空格處插入“%20”這個字串,但是這樣的話,需要挪動後面的字元,複雜度比較高,所以更優的方法是計算出輸入字串中有多少個空格,直接確定好最後返回的字串的大小,然後從後往前推導,如果不是空格的話,直接把原始字串的後面字元向後放置到最後的位置,如果是空格的話,就將“%20”輸入,由於是從後向前來的,所以需要倒序輸入02%,之後不斷迴圈該過程就OK了
程式碼如下
class Solution { public: void replaceSpace(char *str,int length) { if(str==NULL) return ; int originLength = 0; int numberOfBlank = 0; int i=0; while (str[i] != '\0') { ++originLength; if (str[i] == ' ') ++numberOfBlank; i++; } int newstrLength=originLength+numberOfBlank*2; if(newstrLength>length) return ; while(originLength>=0&&newstrLength>=0) { if(str[originLength]==' ') { str[newstrLength--]='0'; str[newstrLength--]='2'; str[newstrLength--]='%'; } else { str[newstrLength--]=str[originLength]; } originLength--; } } };