1.剑指offer05.替换空格
①解法
注意String类的使用
由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。
从左到右遍历字符串 s
获得 s 的当前字符 c
如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3
如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1
class Solution {
public String replaceSpace(String s) {
int length=s.length();
char[] array=new char[length*3];
int size=0;
for(int i=0;i<length;i++){
char c=s.charAt(i);
if (c==' '){
array[size++]='%';
array[size++]='2';
array[size++]='0';
}else{
array[size++]=c;
}
}
String newStr=new String(array,0,size);
return newStr;
}
}
②遍历添加
class Solution(object):
def replaceSpace(self, s):
"""
:type s: str
:rtype: str
"""
res=[]
for c in s:
if c == ' ': res.append("%20")
else: res.append(c)
return "".join(res)
③双指针
class Solution(object):
def replaceSpace(self, s):
"""
:type s: str
:rtype: str
"""
counter=s.count(' ')
res=list(s)
res.extend([' ']*counter*2)
left,right=len(s)-1,len(res)-1
while left>=0:
if res[left]!=' ':
res[right]=res[left]
right-=1
else:
res[right-2:right+1]='%20'
right-=3
left-=1
return ''.join(res)