字符串
二级目录
三级目录
344. 反转字符串
class Solution {
public:
void reverseString(vector<char>& s) {
int l = 0, r = s.size() - 1;
while(l < r)
{
swap(s[l], s[r]);
l++;
r--;
}
return;
}
};
541. 反转字符串 II
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size();
for(int i=0; i<n; i+=(2*k))
{
if(i+k <= n)
{
reverse(s.begin()+i, s.begin()+i+k);
continue;
}
reverse(s.begin()+i, s.begin()+n);
}
return s;
}
};
剑指 Offer 05. 替换空格
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
int sOldSize = s.size();
for(int i=0; i<sOldSize; ++i)
{
if(s[i] == ' ') { count++; }
}
s.resize(sOldSize + count*2);
int sNewSize = s.size();
for(int i=sNewSize-1, j=sOldSize-1; j<i; --i, --j)
{
if(s[j] != ' ') { s[i] = s[j]; }
else
{
s[i] = '0';
s[i-1] = '2';
s[i-2] = '%';
i -= 2;
}
}
return s;
}
};
151. 翻转字符串里的单词
class Solution {
public:
void reverse(string& s, int start, int end)
{
while(start < end)
{
swap(s[start], s[end]);
start++;
end--;
}
}
void removeExtraSpaces(string& s)
{
int slowIdx = 0, fastIdx = 0;
while(s[fastIdx] == ' ' && fastIdx < s.size() && s.size() > 0) { fastIdx++; }
for(; fastIdx<s.size(); ++fastIdx)
{
if(s[fastIdx] == ' ' && s[fastIdx] == s[fastIdx-1] && fastIdx-1 > 0) { continue; }
else { s[slowIdx++] = s[fastIdx]; }
}
if(s[slowIdx-1] == ' ' && slowIdx-1 > 0) { s.resize(slowIdx - 1); }
else { s.resize(slowIdx); }
}
string reverseWords(string s) {
removeExtraSpaces(s);
reverse(s, 0, s.size() - 1);
for(int i = 0; i < s.size(); i++) {
int j = i;
while(j < s.size() && s[j] != ' ') j++;
reverse(s, i, j - 1);
i = j;
}
return s;
}
};
剑指 Offer 58 - II. 左旋转字符串
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;
}
};
KMP(未仔细学习过)
28. 实现 strStr()
var foo = 'bar';