剑指Offer:替换空格
Posted 小布丁value
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer:替换空格相关的知识,希望对你有一定的参考价值。
替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
方法一:开辟新数组
/*
* 字符串替换
* 1, 数组字符长度扩容为原来的 3 倍
* 2.用String的方法 charAt获取到每个值,赋值给新数组
* 3.注意维护size
* 时间复杂度o(n)
* 空间复杂度o(n)
*
*
* */
public String replaceSpace(String s){
int length =s.length();
char[] res= new char[length*3];
int size=0;
for(int i=0;i<length;i++){
char c =s.charAt(i);
if(c==' '){
res[size++]='%';
res[size++]='2';
res[size++]='0';
}else{
res[size++] =c;
}
}
return s;
}
/*
* 字符串替换:
* 方法二:双指针
* 代码思路:
* 1.扩容到加上%20后的大小
* 2.从后向前替换空格,不会覆盖值
* 3.i指向新长度的末尾,j执行旧长度的末尾
* 4.终止条件是i==j
* */
*
public String replaceSpcae(String s) {
//扩容
char[] arr = s.toCharArray();
char[] arr1 = ensureCapacity(s);
//从后往前找,不是空格,值替换 是空格,替换
for (int i = arr.length - 1, j = arr1.length - 1; i < j; i--, j--) {
if (arr[i] == ' '){
arr1[j--] = '0';
arr1[j--] = '2';
arr1[j] = '%';
}else{
arr1[j] = arr[i];
}
}
return new String(arr1);
}
public char[] ensureCapacity(String s){
char [] arr=s.toCharArray();
int count=0;
for(int i=0;i<s.length();i++){
if(arr[i]==' '){
count++;
}
}
char[] res=Arrays.copyOf(arr,arr.length+count*2);
return res;
}
以上是关于剑指Offer:替换空格的主要内容,如果未能解决你的问题,请参考以下文章