「算法刷题」KMP相关题目

LeetCode题目 相关题目类型 相关链接
t替换空格(简单难度) 剑指 Offer 05. 替换空格

题解链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-ji-jian-qing-xi-tu-/
来源:力扣(LeetCode)

题解上有视频

1、初始化:空格数量 count ,字符串 s 的长度 len ;

2、统计空格数量:遍历 s ,遇空格则 count++ ;
3、修改 s 长度:添加完 “%20” 后的字符串长度应为 len + 2 * count ;

4、倒序遍历修改:i 指向原字符串尾部元素, j 指向新字符串尾部元素;当 i = j 时跳出(代表左方已没有空格,无需继续遍历);
当 s[i] 不为空格时:执行 s[j] = s[i] ;
当 s[i] 为空格时:将字符串闭区间 [j-2, j] 的元素修改为 “%20” ;由于修改了 3 个元素,因此需要 j -= 2 ;
5、返回值:已修改的字符串 s ;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
string replaceSpace(string s) {
int count = 0, len = s.size();
// 统计空格数量
for (char c : s) {
if (c == ' ') count++;
}
// 修改 s 长度
s.resize(len + 2 * count);//多加两个空格数,因为字符串本身有一个,再加两个(才能放下%20)
// 倒序遍历修改
for(int i = len - 1, j = s.size() - 1; i < j; i--, j--) {
if (s[i] != ' ')
s[j] = s[i];
else {
s[j - 2] = '%';
s[j - 1] = '2';
s[j] = '0';
j -= 2;
}
}
return s;
}
};


LeetCode题目 相关题目类型 相关链接
剑指offer左旋转字符串(简单难度) 剑指 Offer 58 - II. 左旋转字符串 - 力扣(LeetCode) (leetcode-cn.com)
1
2
3
4
5
6
7
8
9
class Solution {
public:
string reverseLeftWords(string s, int n) {
string str1;
str1 =s.substr(0,n);
s.erase(0,n);//即从给定起始位置0处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用
return s+str1;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
string reverseLeftWords(string s, int n) {
string str="";
for(int i=n;i<s.size();i++){
str+=s[i];
}
for(int i=0;i<n;i++){
str+=s[i];
}
return str;
}
};