替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
- 查找到所有空格的位置
- 将空格替换成相应的字符串
提供API说明:
indexOf(String str ,int fromIndex):
- 参数:
- str - 要搜索的子字符串。
- fromIndex - 开始搜索的索引位置。
返回:
指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
substring(index beginIndex ,int endIndex):
- 参数:
- beginIndex - 起始索引(包括)。
- endIndex - 结束索引(不包括)。
- 返回:
- 指定的子字符串。
- 抛出:
- IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。
代码如下:
public class Solution {
public String replaceSpace(StringBuffer str) {
//所要的结果集
String result = new String();
//子串裁剪从0开始
int start = 0;
int end;
//API的indexOf函数,返回值给end
//如果,end不是-1,则说明后面还可能存在空格字符
//否则,说明此次start到字符末尾已经没有空格字符
while((end=str.indexOf(" ", start))!=-1){
//API的substring函数,对返回值进行处理
result = result + str.substring(start, end) + "%20";
//start之前的部分已经处理完毕,下次处理从end+1开始索引查找空格字符
start = end+1;
}
//考虑边界条件:需要加上最后一次没有找到空格字符剩余的子串
return result + str.substring(start);
}
}
在源字符串长度为n,替换字符串长度为m的情况下:
最坏空间复杂度为O(n*m)
如果indexOf()函数的复杂度总和为O(n),并且substring函数的复杂度为O(1)则:
最坏时间复杂度为O(n)
(以上如有错误,还望大神指教)