https://blog.youkuaiyun.com/yiyiwudian/article/details/46659877
【题目】
请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为 We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
【思路】
我们可以考虑从最终结果入手,指针从最终结果的末尾开始移动。
首先,先遍历一次字符串,统计出字符串中空格的个数,来计算替换之后字符串的总长度。(替换之后的字符串长度=原来的长度+2*空格数,这里是2*空格数,是因为原来的空格已经占有了一个长度,只需要在原来的基础上再增加两个长度就可以将%20插入进去)
然后,从字符串的后面开始复制和替换。准备两个指针,P1和P2,P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾。
P1向前移动,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。
碰到空格之后,P1向前移动1格,在P2之前插入字符串”%20”,由于”%20”的长度为3,所以P2也要向前移动3格。
P1和P2的不断重复上述操作,直到P1和P2都指向最开头(此时所有的空格已经全部替换了)。
按照这样的思路,所有的字符都只复制(移动)了一次,由此这个算法的时间复杂度为O(n)。
【代码】
public static void main(String[] args) {
System.out.println(replaceSpace1("we are happy"));
}
//替换空格
public static String replaceSpace(String s){
if(s==null||s.length()==0){
return null;
}
char c[]=s.toCharArray();
StringBuilder str=new StringBuilder();
for(int i=0;i<c.length;i++){
if(c[i]==' '){
str.append("%20");
}
else{
str.append(c[i]);
}
}
return str.toString();
}
public static String replaceSpace1(String str){
if(str==null||str.length()==0){
return null;
}
char[] c=str.toCharArray();
int len1=str.length();//原字符串长度
int numOfSpace=0;
//统计原串空格个数
for(int i=0;i<len1;i++){
if(c[i]==' '){
numOfSpace++;
}
}
int len2=len1+2*numOfSpace;//新串长度
char[] cc=new char[len2];
//// 定义两个指针,在字符串的后面进行复制和替换
int index1=len1-1;
int index2=len2-1;
while(index1>=0 && index2>=index1){
if(c[index1]==' '){
cc[index2--]='0';
cc[index2--]='2';
cc[index2--]='%';
}
else{
cc[index2--]=c[index1];
}
index1--;
}
return String.valueOf(cc);
}
1114

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



