剑指Offer_替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路
思路1
创建一个StringBuffer对象,遍历str,如果是空格StringBuffer对象就append "%20",否则就append碰到的字符。
时间复杂度O(n)
空间复杂度O(n)
思路2
先遍历str统计空格数目,然后扩增str,从后往前遍历str,如果是空格则从后往前添加"%20",否则就把这个字符移动到后面。
时间复杂度O(n)
空间复杂度O(1)
代码
class Solution {
public String replaceSpace(StringBuffer str) {
// 思路1
StringBuffer res = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
res.append("%20");
} else {
res.append(str.charAt(i));
}
}
return res.toString();
}
public String replaceSpace2(StringBuffer str) {
// 思路2
int spaceNum = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ')
spaceNum++;
}
int oldLength = str.length();
int newLength = str.length() + spaceNum * 2;
str.setLength(newLength);
int p = newLength - 1;
for (int i = oldLength - 1; i >= 0; i--) {
if (str.charAt(i) == ' ') {
str.setCharAt(p--, '0');
str.setCharAt(p--, '2');
str.setCharAt(p--, '%');
} else {
str.setCharAt(p--, str.charAt(i));
}
}
return str.toString();
}
}

浙公网安备 33010602011771号