剑指Offer学习 05.替换空格
剑指Offer学习 05.替换空格
题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 :
输入:s = “We are happy.”
输出:“We%20are%20happy.”
思路:
假设这个字符串的长度为6,里面有5个字符,一个空格。
S | T | U | D | Y |
---|
1.初始化:
int count=0,int length=s.size()
2.求空格数量count:
for(int i=0; i<length;i++){
if (s[i] == ' ') {
count++;
}
}
3.扩大s的长度为:length+空格数*2
s.resize(length+count*2);
S | T | U | D | Y |
---|
4.定义双指针i,j进行for循环:
- 初始i指向length-1,j指向resize后的新长度-1。
S | T | U | D | i | j | ||
---|---|---|---|---|---|---|---|
S | T | U | D | Y |
- 若s[i]不为空格,则让s[i]赋值给s[j](即让最后一个元素放在最后一个位置);
S | T | U | D | i | j | ||
---|---|---|---|---|---|---|---|
S | T | U | D | Y |
- 若s[i]为空格,则让s[j-2]=’%’,s[j-1]=‘2’,s[j]=‘0’,j=j-2;
S | T | U | D | i | j | ||
---|---|---|---|---|---|---|---|
S | T | U | D | Y |
for(int i=length-1,j=s.size()-1;i<j;i--,j--){
if(s[i]!=' '){
s[j]=s[i];
}
else{
s[j-2]='%';
s[j-1]='2';
s[j]='0';
j=j-2;
}
}
S | T | U | D | i | j | ||
---|---|---|---|---|---|---|---|
S | T | U | D | % | 2 | 0 | Y |
C++代码
class Solution {
public:
string replaceSpace(string s) {
int count=0;
int length=s.size();
for(int i=0; i<length;i++){
if (s[i] == ' ') {
count++;
}
}
s.resize(length+count*2);
for(int i=length-1,j=s.size()-1;i<j;i--,j--){
if(s[i]!=' '){
s[j]=s[i];
}
else{
s[j-2]='%';
s[j-1]='2';
s[j]='0';
j=j-2;
}
}
return s;
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。