题目
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例 1:
输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"
示例 2:
输入:" ", 5 输出:"%20%20%20%20%20"
解题
此题和剑指 Offer 05:替换空格有相似之处。
此题字符串的真实长度,表示实际长度要大于真实长度,因此,大于真实长度的字符或者空格都是没有意义的。
统计空格的时候,直接无视后面大于真实长度的。
方法一:使用额外空间
class Solution { public: string replaceSpaces(string S, int length) { string res; for(int i=0;i<length;i++){ if(S[i]==' '){ res+="%20"; } else{ res+=S[i]; } } return res; } };
方法二:原地修改(倒序)
class Solution { public: string replaceSpaces(string S, int length) { string res; //统计空格数量 int count=0; for(int i=0;i<length;i++){ if(S[i]==' ') count++; } //根据有效空格数量去扩充字符串 S.resize(length+count*2); //双指针倒序遍历,i指向原始有效字符串,j指向要更新的内容。 for(int i=length-1,j=S.size()-1;j>=0;i--,j--){ if(S[i]!=' '){ S[j]=S[i]; } else{ S[j]='0'; S[j-1]='2'; S[j-2]='%'; j-=2; } } return S; } };