今天是字符串的相关内容
344 反转字符串
用双指针,刚开始学习就不用库函数了,不然等于白学哈哈哈哈哈哈
class Solution {
public:
void reverseString(vector<char>& s) {
int l=0,r = s.size()-1;
while(l<r){
char help = s[l];
s[l]=s[r];
s[r]=help;
l++;
r--;
}
}
};
541 反转字符串||
这个题目是在上一题的基础上,进行分段的反转,关键在于判断条件,和每轮循环如何循环
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=(2*k)){
if(i+k<s.size()){
reverse(s.begin()+i,s.begin()+i+k);
}
else{
reverse(s.begin()+i,s.end());
}
}
return s;
}
};
offer05替换空格
建议采取原地替换,不然没有难度
class Solution {
public:
string replaceSpace(string s) {
int count =0;
int oldsize = s.size();
for(int i=0;i<s.size();++i){
if(s[i]==' '){
count++;
}
}
s.resize(s.size()+2*count);
int newSize = s.size();
for(int i = newSize-1,j=oldsize-1;j<i;j--,i--){
if (s[j] != ' ') {
s[i] = s[j];
} else {
s[i] = '0';
s[i - 1] = '2';
s[i - 2] = '%';
i -= 2;
}
}
return s;
}
};
151 反转字符串里的单词
这是这几天来自己认认真真敲出来的第一道题目,感觉真的很不容易啊mad
class Solution {
public:
string reverseWords(string s) {
vector<string> help;
string word="";
int n = s.size();
for (int i = 0; i < n;++i) {
if (s[i] != ' ') {
if (i == n - 1) {
word += s[i];
help.push_back(word);
}
else {
word += s[i];
}
}
else{
if (word == "") {
continue;
}
else {
help.push_back(word);
word = "";
}
}
}
reverse(help.begin(), help.end());
string ans;
for (int i = 0;i<help.size()-1;i++) {
ans+=help[i];
ans+=" ";
}
ans+=help[help.size()-1];
return ans;
}
};
这道题目自己做的思路是,先记录每一个单词,然后反转之后记录到新的字符串中
offer58
此题需要巧妙思考如何在不申请额外空间的情况下进行操作
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;
}
};