文章目录
主要知识点
对字符串的操作非常重要,应该熟练掌握。
习题
1. Leetcode 344. 反转字符串
题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
初见
从头搜索,将前半部分字符与后半部分字符按顺序进行交换即可。
代码
class Solution {
public:
void reverseString(vector<char>& s) {
char tmp;
for (int i = 0; i < s.size() / 2; ++i) {
tmp = s[i];
s[i] = s[s.size() - 1 - i];
s[s.size() - 1 - i] = tmp;
}
}
};
2. Leetcode 345. 反转字符串中的元音字母
题目描述
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。
初见
借用双指针的思想,要调换单词中所有元音字母的顺序,只需要首位配对找到相应元音字母位置即可。因此令 i
从头开始,j
从尾开始寻找元音,找到后进行调换,直至 i >= j
,表明已交换单词中的所有元音字母。
代码
class Solution {
public:
string reverseVowels(string s) {
for (int i = 0, j = s.size() - 1; i < j;) {
while (tolower(s[i]) != 'a' && tolower(s[i]) != 'e' &&
tolower(s[i]) != 'i' && tolower(s[i]) != 'o' &&
tolower(s[i]) != 'u' && i < j) {
++i;
}
while (tolower(s[j]) != 'a' && tolower(s[j]) != 'e' &&
tolower(s[j]) != 'i' && tolower(s[j]) != 'o' &&
tolower(s[j]) != 'u' && i < j) {
--j;
}
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
++i;
--j;
}
return s;
}
};
3. Leetcode 2000. 反转单词前缀
题目描述
给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。
例如,如果 word = “abcdefd” 且 ch = “d” ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 “dcbaefd” 。
返回 结果字符串 。
初见
与上一题类似,找到字符 ch
第一次出现的下标 i
后,按下标反转字符串中 0-i
的字符即可。
代码
class Solution {
public:
string reversePrefix(string word, char ch) {
for (int i = 0; i < word.size(); ++i) {
if (word[i] == ch) {
for (int j = 0; j <= i / 2; j++) {
char tmp = word[j];
word[j] = word[i - j];
word[i - j] = tmp;
}
break;
}
}
return word;
}
};
总结
- 第一点