链接
牛客:替换空格
LeetCode:剑指 Offer 05. 替换空格
思路
将空格替换成“%20”,原来的1个空格需要填充三个字符,如果我们从前往后遍历,每次替换的时候都需要将后面的字符全部移动。
为了解决这个问题,我们换个思路,先遍历一遍字符串,知道空格数量,这样可以算出字符串替换后应有的大小,然后从后面开始遍历替换,这样可以有效减小字符串反复移动效率低下的缺点。
代码
public class Solution {
public String replaceSpace(StringBuffer str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count++;
}
}
char[] newStr = new char[str.length() + count * 2];
int index = newStr.length - 1;
for (int i = str.length() - 1; i >= 0 && index >= 0; i--) {
if (str.charAt(i) == ' ') {
newStr[index--] = '0';
newStr[index--] = '2';
newStr[index--] = '%';
} else {
newStr[index--] = str.charAt(i);
}
}
return new String(newStr);
}
}
LeetCode:
class Solution {
public String replaceSpace(String s) {
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
count++;
}
}
char[] newStr = new char[s.length() + count * 2];
int index = newStr.length - 1;
for (int i = s.length() - 1; i >= 0 && index >= 0; i--) {
if (s.charAt(i) == ' ') {
newStr[index--] = '0';
newStr[index--] = '2';
newStr[index--] = '%';
} else {
newStr[index--] = s.charAt(i);
}
}
return new String(newStr);
}
}