参考自:《剑指Offer——名企面试官精讲典型编程题》
题目:替换字符串中的空格
请实现一个函数,把字符串中的每个空格替换成"%20"。
例如输入“We are happy.”,则输出“We%20are%20happy.”。
主要思路:1.首先计算出字符串中的空格数目,进而获取新字符串的长度(原始长度+空格数目*2)。2.从字符串后面开始向前遍历,若遇到空格,则把空格替换成"%20",否则保留原字符。
关键点:新字符串的长度;通常修改、删除等操作选择从后开始遍历。
时间复杂度:O(字符串长度)
public class ReplaceSpace
{
public static void main(String[] args)
{
String str = "hello world";
String result = replaceSpace(str);
System.out.println(result);
}
private static String replaceSpace(String str) {
if (str == null || str.length() == 0) {
return "";
}
char[] chars = str.toCharArray();
int spaceCount = getSpaceCount(chars);
int originalLength = chars.length;
//新字符串最终长度
int finalLength = originalLength + 2 * spaceCount;
char[] result = new char[finalLength];
//从后面开始遍历
for (int i = originalLength - 1; i >= 0; i--) {
char currentChar = chars[i];
//替换空格
if (currentChar == ' ') {
result[--finalLength] = '0';
result[--finalLength] = '2';
result[--finalLength] = '%';
} else {
result[--finalLength] = currentChar;
}
}
return String.valueOf(result);
}
private static int getSpaceCount(char[] chars) {
int spaceCount = 0;
for (char c : chars) {
if (c == ' ') {
spaceCount++;
}
}
return spaceCount;
}
其他方法:
1.直接调用字符串replace()方法
private static String replace(String str) {
if (str == null || str.length() == 0) {
return "";
}
return str.replace(" ", "%20");
}
2.使用StringBuilder动态添加字符串
private static String replaceByStringBuilder(String str) {
if (str == null || str.length() == 0) {
return "";
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char currentChar = str.charAt(i);
if (currentChar == ' ') {
stringBuilder.append("%20");
} else {
stringBuilder.append(currentChar);
}
}
return stringBuilder.toString();
}