每日刷题
文档讲解:代码随想录 (programmercarl.com)
视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com)
LeetCode 344.反转字符串
题目链接:https://leetcode.cn/problems/reverse-string/description/
解题思路:正常思路。
参考代码:
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--;
}
}
};
LeetCode 541. 反转字符串II
题目链接:https://leetcode.cn/problems/reverse-string-ii/description/
解题思路:利用上题函数,遍历处理s,每2*k个字符处理一次。
代码如下:
class Solution {
public:
void reverse(string &s,int begin,int end){
while(begin<end){
swap(s[begin],s[end]);
begin++;
end--;
}
}
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=2*k){
if((s.size()-i)<k){
reverse(s,i,s.size()-1);
}else{
reverse(s,i,i+k-1);
}
}
return s;
}
};
LeetCode 卡码网:54.替换数字
题目链接:https://kamacoder.com/problempage.php?pid=1064
解题思路: 卡哥提示:对于线性数据结构,填充或者删除,后序处理会高效的多。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int size=s.size();
int count=0;
for(char x:s){
if(x>='0'&&x<='9')count++;
}
s.resize(size+count*5);
int old=size-1;
int news=s.size()-1;
while(old>=0){
if(s[old]>='0'&&s[old]<='9'){
s[news]='r';
s[news-1]='e';
s[news-2]='b';
s[news-3]='m';
s[news-4]='u';
s[news-5]='n';
news-=6;
}else{
s[news]=s[old];
news--;
}
old--;
}
cout<<s<<endl;
return 0;
}
LeetCode 151.翻转字符串里的单词
题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/
解题思路:先处理空格,再反转两次,第一次反转整个字符串,第二次反转每个单词。
代码如下:
class Solution {
public:
void reverse(string &s,int begin,int end){
while(begin<end){
swap(s[begin],s[end]);
begin++;
end--;
}
}
void deletestr(string &s){
int slow=0;
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
if(slow!=0)s[slow++]=' ';
while(i<s.size()&&s[i]!=' ')s[slow++]=s[i++];
}
}
s.resize(slow);
}
string reverseWords(string s) {
deletestr(s);
reverse(s,0,s.size()-1);
int l=0;
for(int i=0;i<s.size();i++){
if(s[i]==' '){
int r=i-1;
reverse(s,l,r);
l=i+1;
}
}
reverse(s,l,s.size()-1);
return s;
}
};
LeetCode 卡码网:55.右旋转字符串
题目链接:https://kamacoder.com/problempage.php?pid=1065
解题思路:三次反转操作,先反转整个字符串,再分别对k分割的左右两个字符串进行反转操作。
代码如下:
#include<iostream>
#include<string>
using namespace std;
void reverse(string&s,int begin,int end){
while(begin<end){
swap(s[begin],s[end]);
begin++;
end--;
}
}
int main(){
int k;
cin>>k;
string s;
cin>>s;
reverse(s,0,s.size()-1);
reverse(s,0,k-1);
reverse(s,k,s.size()-1);
cout<<s<<endl;
return 0;
}