2.替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路1:利用if判断,遇到空格就替换。
// 替换空格
public class Solution {
public String replaceSpace(StringBuffer str) {
if (str == null) {
return null;
}
StringBuffer result = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
result.append('%');
result.append('2');
result.append('0');
} else {
result.append(str.charAt(i));
}
}
return result.toString();
}
}
思路2:但面试时,希望做到复杂度为o(n),那么就需要转换思路。对字符串进行遍历,那么可以得知两个信息,chs的长度以及空格数,分别记为len和num,那么当空格被替换成”%20”后,长度变为len+2*num。然后再倒着遍历,同时将字符复制到新长度最后的位置,并依次向左倒着复制。遇到空格就依次把”0”、”2”、”%”进行复制。
// 替换空格
public class Solution {
public String replaceSpace(StringBuffer str) {
if (str == null) {
return null;
}
// 遍历获得空格数
int spaceCount = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
spaceCount++;
}
}
char[] chs = new char[str.length() + 2 * spaceCount];
int charLen = chs.length - 1;
// 倒序遍历
for (int i = str.length() - 1; i >= 0; i--) {
if (str.charAt(i) == ' ') {
chs[charLen--] = '0';
chs[charLen--] = '2';
chs[charLen--] = '%';
} else {
chs[charLen--] = str.charAt(i);
}
}
return String.valueOf(chs);
}
}