题目:将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:设原字符串数组为A,新建一个大点的字符串数组B,然后遍历A,遇到空格B中的值就用 %20 代替,否则按原数组A中字符串代替。
后来看了解析,是在一个数组里面操作的,思路是先遍历一遍原字符串数组,看有几个空格就可以确定新的字符串数组有多大了(新长度=原长度 + 2*空格数) ,然后从新长度的数组下标填充就欧克了。
代码如下
Java:这个是新建了一个字符串
public static String replaceSpace(StringBuffer s) {
if(s==null) return s.toString();
StringBuilder sb = new StringBuilder();
for(int i=0;i<s.length();i++) {
if(String.valueOf(s.charAt(i)).equals(" ")) {
sb.append("%20");
}else {
sb.append(s.charAt(i));
}
}
return String.valueOf(sb);
}
C语言,这个是在原数组上改,O(n)
#include<stdio.h>
#include<string.h>
int main()
{
char s[50]={"we are happy and young."} ;
int len = strlen(s);
int space =0;
for(int i=0;i<len;i++){
if(s[i]==' ') space++;
}
int end =2*space+len-1;
printf("%d\n",end);
for(int i=len-1;i>=0;i--){
if(s[i]==' '){
s[end--]='0';
s[end--]='2';
s[end--]='%';
}else{
s[end--]=s[i];
}
}
printf("%s",s);
return 0;
}
总结:Java版的思路更清晰,C语言版的更快,空间复杂度更低。