剑指Offer:面试题05. 替换空格
题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:
输入:s = "We are happy." 输出:"We%20are%20happy."限制:
0 <= s 的长度 <= 10000要点
- 如果是直接从头查找,找到后替换,但是会挤到后面的元素,导致部分挪动,时间复杂度为`O(n^2)``
- 可以先计算替换后的整体长度,然后从后往前处理数据,避免了挤到其他元素,时间复杂度为`O(n)``
代码
public String replaceSpace(String s) {
if(s.length()==0){
return s;
}
int spaceCount=0;
for (int i = 0; i < s.length(); i++) {
if(' '==(s.charAt(i))){
spaceCount++;
}
}
int k=s.length()+spaceCount*2-1;
char[] arr=new char[k+1];
for (int i = s.length()-1; i >=0 ; i--) {
if(' '==(s.charAt(i))){
arr[k--]='0';
arr[k--]='2';
arr[k--]='%';
}else{
arr[k--]=s.charAt(i);
}
}
return new String(arr);
}
查看原文:http://yuyy.info/%e7%ae%97%e6%b3%95%e8%ae%ad%e7%bb%83/%e5%89%91%e6%8c%87offer%e9%9d%a2%e8%af%95%e9%a2%9805-%e6%9b%bf%e6%8d%a2%e7%a9%ba%e6%a0%bc/