请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路:在同一串预留好空间的字符串(或数组)从后向前查找找替换,减少字符移动
import java.util.*;
import java.util.concurrent.LinkedBlockingQueue;
public class Main{
public static void main(String[] ab) {
Scanner sca=new Scanner(System.in);
StringBuffer str=new StringBuffer(sca.nextLine());
int numOfNull=0; //有多少个零
int len=str.length();
for(int i=0;i<len;i++)
{
if(str.charAt(i)==' ')
{
numOfNull++;
str.append(' ');/* 每遇到一个空格需要为新字符串多预留2个字符 */
str.append(' ');/* 这样保证空间复杂度只有Q(M+N) */
}
}
int newl=str.length();//新字符串长度
int i=len-1;
int j=newl-1;
/*
*
* 从后向前依次移动原字符串的索引和新字符串的索引
* 时间复杂度:O(N+M)
* 遇到空格就在新字符串的当前位置处填上0,2,%
*
* */
while(i>=0)
{
if(str.charAt(i)==' ')
{
str.setCharAt(j, '0');
j=j-1;
str.setCharAt(j, '2');
j=j-1;
str.setCharAt(j, '%');
}
else
{
str.setCharAt(j, str.charAt(i));
}
j--;
i--;
}
System.out.println(str);
}
}