题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
有三种方法实现:
package com.learn.swordOffer;
public class ReplaceSpace_02 {
//创建新的字符串实现,调用String方法
public String replaceSpace(StringBuffer str) {
String strStr = str.toString();
strStr = strStr.replace(" ", "%20");
return strStr;
}
//创建新的字符串实现,但是不调用String方法
public String replaceSpace2(StringBuffer str) {
String strStr = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == ' ') {
strStr += "%20";
} else {
strStr += c;
}
}
return strStr;
}
//不创建新的字符串实现,原地替换,O(n)的解法
public String replaceSpace3(StringBuffer str) {
if (str == null || str.length() == 0) {
return null;
}
//空格数量
int numOfBlank = 0;
int len = str.length();
//计算空格数量
for (int i = 0; i < len; i++) {
if (str.charAt(i) == ' ') {
numOfBlank++;
}
}
//设置字符串长度
str.setLength(len + numOfBlank * 2);
//定义两个指针
int startIndex = len - 1;
int endIndex = str.length() - 1;
while (startIndex >= 0 && startIndex < endIndex) {
char c= str.charAt(startIndex);
if(c==' '){
startIndex--;
str.setCharAt(endIndex--, '0');
str.setCharAt(endIndex--, '2');
str.setCharAt(endIndex--, '%');
}else{
str.setCharAt(endIndex, c);
startIndex--;
endIndex--;
}
}
return str.toString();
}
public static void main(String[] args) {
StringBuffer str = new StringBuffer("We Are Happy");
//实例对象
ReplaceSpace_02 rep = new ReplaceSpace_02();
String strStr = rep.replaceSpace3(str);
System.out.println(strStr);
}
}
第一种和第二种方法比较容易实现,面试的时候更多是考察的String.replace()方法源码的实现的思路。
本文详细介绍了三种将字符串中空格替换为“%20”的算法实现,包括使用String方法、手动遍历替换以及原地替换的高效算法,深入探讨了不同方法的优劣及应用场景。
670

被折叠的 条评论
为什么被折叠?



