《剑指offer 05 替换空格》
【LeetCode链接】
【题目】
请实现一个函数,把字符串S中的每个空格替换成"%20"。
示例 1
输入:s = “We are happy.”
输出:“We%20are%20happy.”
【思路】
【C语言实现】
这题如果用C语言来解的话,具体的思路就是先找出空格的个数,然后开辟一段空间将源字符串拷贝过去,当遇到空格不拷贝,而是填上%20,最后再返回这段空间的首地址即可。这是一种空间换时间的一种设计。
值得注意的是,不可以直接对S进行修改,因为LeetCode对内存的非法访问检查的较为严格。直接对字符串s进行修改,避免不了对数据向后挪动,在这一过程中就会有对内存的非法访问,所以我们最好开辟一块新的空间。
【代码实现】
char* replaceSpace(char* s)
{
int len=strlen(s);
int count=0;
for(int i=0;i<len;i++){
if(s[i]==' '){
count++;
}
}
char* ans=(char*)malloc(sizeof(char)*len+count*2+1);
for(int i=0,j=0;i<=len;i++,j++){
if(s[i]==' '){
ans[j]='%';
ans[j+1]='2';
ans[j+2]='0';
j+=2;
}
else{
ans[j]=s[i];
}
}
return ans;
}
【C++实现】
C++实现就简单多了,可以直接对S进行修改,因为在插入的时候S会自动扩容,不存在内存非法访问的问题。这里主要要注意的就是对于几个接口的使用。
【代码实现】
class Solution {
public:
string replaceSpace(string s) {
for(int i=0;i<s.size();i++){
if(s[i]==' '){
s.erase(i,1);
s.insert(i, "%20");//前插
}
}
return s;
}
};