剑指offer刷题计划

理想状态:
字符串(8题) 7.1
数组 (11题) 7.2
链表(8题) 7.3
二叉树 (12题) 7.4

字符串

string

string 与 char

左旋转字符串

注意这个if条件,不要漏掉

翻转单词顺序列

str += ' ', 在字符串末尾添加一个空格字符。 注意到此处str长度 +1 了, 所以后面用到的str.size() 也已经+1了, 这一点很容易注意不到。

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
class Solution {
public:
string ReverseSentence(string str) {

str += ' ';
for (int i = 0, j = 0; i < str.size(); i++) {
if (str[i] == ' ') {
reverse (str, j, i - 1);
j = i + 1;
}
}

str = str.substr(0, str.size() - 1);
reverse (str, 0, str.size() - 1);
return str;
}
private:
void reverse (string& str, int begin, int end) {
while (begin < end) {
swap (str[begin], str[end]);
begin++;
end--;
}
}
};

把字符转换成整数

这道题注意 这个步骤 res = res * 10 + str[i] - '0' 这里 - '0'的作用是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int StrToInt(string str) {
int signal = 1;
if (str[0] == '-') {
signal = -1;
}
int res = 0;
for (int i = (str[0] == '-' || str[0] == '+') ? 1 : 0; i < str.size(); i++) {
if (str[i] >= '0' && str[i] <= '9') {

res = res * 10 + str[i] - '0';

} else {
return 0;
}

}
return res * signal;
}
};

快慢指针

不能对一个nullptr进行操作。

pSlow 指向下一个位置后,要判断一下这个新位置是否为空,如果非空,pFast才能指向新位置的下一个位置。

0%