题解 | #替换空格#
替换空格
http://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68
原地修改+双指针,不使用额外的辅助空间。 首先遍历字符串获取字符串中的空格数量countspace。变长后的字符串比原字符串长2*countspace个单位。 我们用两个指针ptr1\ptr2分别指向变长前的字符串末尾和变长后的字符串末尾。如果ptr1遇到的不是空格,则把这个字符复制到ptr2的位置上去,如果是空格,那么ptr2连续跳动三次,分别赋上‘0‘、’2‘、’%‘的值,直到ptr1比0小。
```class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
//"we%20are%20o"
string replaceSpace(string& s) {
if(s.size()==0){
return s;
}
// write code here
int ptr1=s.size()-1;
int countSapce=0;
for(auto ch:s){
if(ch==' '){
countSapce++;
}
}
for(int i=0;i<countSapce*2;i++){
s.push_back(' ');
}
int ptr2=s.size()-1;
while(ptr1>=0){
if(s[ptr1]==' '){
s[ptr2--]='0';
s[ptr2--]='2';
s[ptr2--]='%';
ptr1--;
}
else{
s[ptr2]=s[ptr1];
ptr2--;
ptr1--;
}
}
return s;
}
};
时间复杂度为O(N)
空间复杂度为O(1) 注:答案的空间不算在内