题目:请实现一个函数,把字符串中的每一个空格替换成"%20"。例如,输入"We are happy.",则输出"We%20are%20happy."。
思路:如果从前往后替换,那后面的内容会被替换多次,时间复杂度为O(n^2)。从后往前替换,则每一个字符只要被替换1次,时间复杂度为O(1),先算出字符串中有多少空格,假如为n,从后往前遍历,当遍历的元素不是空格时,将内容往后移动n位,若遍历到一个空格,就放置一个"%20",在继续遍历,但继续遍历的元素后移时只能后移n-3位,因为每个空格占据3位,以此类推。
解法:
public class Test1{
public static void main(String[] args) {
String str=" We are happy.";
// String str=" ";
String newStr=replaceSpace(str);
System.out.println(newStr);
}
private static String replaceSpace(String str) {
if(str==null||str.equals("")){
System.out.println("字符串为空或者是个空字符串");
return null;
}
int length=str.length();
int spaceCount=0;
for(int i=0;i<length;i++){
if(str.charAt(i)==' '){
spaceCount++;
}
}
int newLength=length+spaceCount*2;
char[] ch=new char[newLength];
int end=newLength-1;
for (int i = length-1; i >=0; i--) {
if(str.charAt(i)!=' '){
ch[end]=str.charAt(i);
end--;
}else{
ch[end--]='0';
ch[end--]='2';
ch[end--]='%';
}
}
return String.copyValueOf(ch);
}
}