剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
我的题解
太简单了,没啥好写的。
class Solution {
public:
string replaceSpace(string s) {
for(int i=0;i<s.length();i++)
{
if(s[i]==' ')
{
s.erase(s.begin()+i);
s.insert(i, "%20");
}
}
return s;
}
};
其他题解
写这个题解是感觉他写的很规范,记一下模板。
class Solution {
public:
string replaceSpace(string s) {
for(int i=0;i<s.length();i++)
{
if(s[i]==' ')
{
s.insert(i+1,"%20");
}
}
string::iterator it;
for(it=s.begin();it!=s.end();it++)
{
if(*it==' ')
s.erase(it);
}
return s;
}
};
剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
限制:
1 <= k < s.length <= 10000
我的解法
把每一个删掉再拼接到后面,很慢。
class Solution {
public:
string reverseLeftWords(string s, int n) {
for(int i =0;i<n;i++)
{
auto tmp=s[0];
auto it =s.begin();
s.erase(it);
s=s+tmp;
}
return s;
}
};
想到数据结构的例题,还可以利用双指针反转。
其他解法
利用数学方法,这样可以不额外申请空间并且旋转
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(), s.begin() + n);
reverse(s.begin() + n, s.end());
reverse(s.begin(), s.end());
return s;
}
};