题目链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
第一次编辑代码:
public class Solution {
public String replaceSpace(StringBuffer str) {
boolean flag = true;
while(flag){
flag = false;
int blank = str.indexOf(" ");
if(blank != -1){
str.replace(blank,blank,"%20");
flag = true;
}
}
return str.toString();
}
}
提交结果
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
反思
使用StringBuffer的方法运行时间过长。
第二次编辑代码:
public class Solution {
public String replaceSpace(StringBuffer str) {
char[] str1 = str.toString().toCharArray();
char[] str2 = new char[50];
int i,j = 0;
for(i=0;i<str.length();i++){
if(str1[i] == ' '){
str2[j] = '%';
str2[j+1] = '2';
str2[j+2] = '0';
j += 3;
}else{
str2[j] = str1[i];
j++;
}
}
str2[j] = '\0';
return new String(str2);
}
}
提交结果
答案错误:您提交的程序没有通过所有的测试用例
你的输出为:
"hello%20world
反思
百思不得其解,为什么字符串貌似缺了结尾标志,决定看一手答案。
看完别人的提交,人傻了,String类自带的方法就可以简单解决问题,查找API知道了可以使用replace()方法,当然这里暂不涉及优化。
第三次编辑代码:
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replace(" ","%20");
}
}