?
344. 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组?s ?的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 额外空间解决。
示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
?注:使用双指针,定义一个头指针left,一个尾指针right,然后分别交换头尾指针。
class Solution {
public:
void reverseString(vector<char>& s) {
int n = s.size(),k=0;
vector<char> a;
int left=0,right=n-1;
while(left<right){
k=s[left];
s[left]=s[right];
s[right]=k;
left++;
right--;
}
}
};
?
557. 反转字符串中的单词 III
给定一个字符串?s ?,反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
1 <= s.length <= 5 * 104 s ?包含可打印的?ASCII?字符。s ?不包含任何开头或结尾空格。s ?里?至少?有一个词。s ?中的所有单词都用一个空格隔开。
?注:本题使用双指针的形式,通过空格的位置和字符长度来判断翻转字符串的位置,一层for循环后找到每一个位置后,然后用一个while循环分别对每一个位置进行反转操作。在while循环中,通过交换收尾元素指针来进行元素交换。
class Solution {
public:
string reverseWords(string s) {
int n = s.size(), j = 0, n1 = 0;
char temp;
for(int i = 0;i <= n;i++){
if(s[i] == ' '|| i == n){
n1 = i-1;//记录空格的位置
while(j < n1){
temp = s[j];
s[j] = s[n1];
s[n1] = temp;
j++;
n1--;//字符交换
}
j = i + 1;//跳到下一个空格后单词
}
}
return s;
}
};
通过以上的练习,对双指针的形式有了更进一步的了解,明天见~
|