【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
题目:将一个字符串中的空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
两种思路:不同解题思路导致时间复杂度不同。
思路一:从前往后,遇到两次空格都增加字符串长度且每次的时间复杂度都是O(n),整体时间复杂度为:T(n) = O(n的平法),效率低。
思路二:从后往前。
测试实例:
class Method{
public String replaceblank (String input) {
if(input == null) { //判断是否为空,为空则直接返回null
return null;
}
int num = 0; //定义计数器来计算空格的个数
int length = input.length(); //将字符串的长度赋给length
int newlength = 0; //定义变量接受改进后的字符串长度
/*遍历循环,调用索引来判断*/
for(int i = 0; i < input.length();i++) {
if(' ' == input.charAt(i)) { //调用字符串的索引和空格进行对比
num++;
}
}
/* 增加和转换后的字符串*/
newlength = length + (num*2); //增加后的字符串长度
//为什么要转换成数组形式的字符串呢?为了获取 索引 进行判断
char [] newchar = new char[newlength];
int index = newlength-1;
for(int i = length - 1; i >= 0;i--) { //倒着循环判断
//注意:第一个指针一个是在原数组的最后,第二个指针是在增加长度的数组的最后
if(input.charAt(i) == ' ') { //判断是否循环遇到空格,进行替换
newchar[index--] = '0'; //实现替换功能
newchar[index--] = '2';
newchar[index--] = '%';
}else { //如果没有遇到空格,则copy过去
newchar[index--] = input.charAt(i);
}
}
return new String(newchar); //返回转换后的结果
}
}
来源:oschina
链接:https://my.oschina.net/u/4432600/blog/3154080