Leetcode刷题方法总结—字符串全解
文章目录
题型一:翻转字符串
举例Leetcode题目 反转字符串:题目地址
解题思路:使用反向双指针进行前后替换
class Solution {
public:
void reverseString(vector<char>& s)
{
//双指针法
int left=0,right=s.size()-1;
while(left<=right)
{
swap(s[left++],s[right--]);
}
}
};
题型二:范围翻转字符串
举例Leetcode题目 反转字符串II:题目地址
思路:这道题目其实也是模拟,实现题目中规定的反转规则就可以了
处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符
其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k))
{
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= s.size())
{
reverse(s.begin() + i, s.begin() + i + k );
continue;//满足if条件就不执行循环里的其他语句
}
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin() + i, s.begin() + s.size());
}
return s;
}
};
题型三:替换字符串
举例Leetcode题目 替换空格:题目地址
思路:同向双指针直接遍历替换就行了
class Solution {
public:
string replaceSpace(string s)
{
int count = 0; // 统计空格的个数
int sOldSize = s.size();
for (int i = 0; i < s.size(); i++)
{
if (s[i] == ' ')
{
count++;
}
}
// 扩充字符串s的大小,也就是每个空格替换成"%20"之后的大小
s.resize(s.size()