请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
用java非常简单
首先把strbuffer转换成string,然后直接用replaceALL就行了
时间复杂度O(n),不需要额外空间
public class Solution {
public String replaceSpace(StringBuffer str) {
//将str的值转换为String
String res = new String(str);
//替换操作
res = res.replaceAll(" ", "%20");
return res;
}
}
老老实实实现的的思路是用双指针
扫描一遍,得到所有的空格数spaceNum
假设原字符串有X个非空格,Y个空格
则新字符串总共有X+3Y个字符
新的字符串从X+3Y-1开始,逆序填入内容
从后往前扫描原字符串,遇到空格就向新字符串填入三个字符,遇到非空格就向新字符串填入当前字符
时间复杂度是O(n),两遍扫=2n,需要额外的1个空间存储空格数
class Solution {
public:
void replaceSpace(char *str,int length) {
//参数导致的无效情况
if(str == NULL || length <= 0){
return;
}
//计算空格总数
int spaceNum = 0;
for(int i = 0; i < length; i++){
if(str[i] == ' '){
spaceNum++;
}
}
//从后往前生成新字符串
//新字符串最末尾位置为length+2spaceNum-1
int newlen = length + 2 * spaceNum - 1;
for(int i = length - 1; i >= 0; i--){
//是空格,则依次反向插入0 2 %
if(str[i] == ' '){
str[newlen--] = '0';
str[newlen--] = '2';
str[newlen--] = '%';
}
//不是空格,直接插入原字符
else{
str[newlen--] = str[i];
}
}
return;
}
};
网友评论