Day8
今天比较简单,双指针经典应用,没什么好讲的。
344. Reverse String
class Solution {
public:
void reverseString(vector<char>& s) {
if(s.size() == 1)
return;
int left = 0;
int right = s.size()-1;
char tmp;
while(left < right)
{
tmp = s[right];
s[right] = s[left];
s[left] = tmp;
++left;
--right;
}
}
};
541. Reverse String II
使用标准库函数reverse,更直观。
每次我们步进2*k
,反转从i
开始到i+k
位置的元素(不包括i+k
)
class Solution {
public:
string reverseStr(string s, int k) {
if(s.length() == 1)
return s;
int step_len = 2*k;
for(int i=0; i<s.length(); i += step_len)
{
if(s.begin()+i+k < s.end())
reverse(s.begin()+i, s.begin()+i+k);
else
reverse(s.begin()+i, s.end());
}
return s;
}
};
或者不使用库版本,和344反转字符串一样使用双指针
此时由于reverse
是前闭后开,不会反转位置为i+k
的元素,但使用双指针时需要手动-1
纠正
class Solution {
public:
string reverseStr(string s, int k) {
if(s.length() == 1)
return s;
int step_len = 2*k;
for(int i=0; i<s.length(); i += step_len)
{
int left = i;
int right = i+k-1 >= s.length() ? s.length()-1 : i+k-1;
char tmp;
while(left < right)
{
tmp = s[left];
s[left] = s[right];
s[right] = tmp;
++left;
--right;
}
}
return s;
}
};
卡码网:54.替换数字
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
string ans = "";
cin >> str;
for(char c : str)
{
if(static_cast<int>(c-'0') >=0 && static_cast<int>(c-'0') <= 9)
{
ans += "number";
}
else
{
ans += c;
}
}
cout << ans << "\n";
}