344.
class Solution {
public:
void reverseString(vector<char>& s) {
int l =0;
int r = s.size()-1;
while(l<r){//l==r只有一个不进行变化了
char tmp = s[l];
s[l]= s[r];
s[r] = tmp;
l++;
r--;
}
}
};
345如何标记元音字母?? 元音还有大写字母
- 不用哈希表,直接find函数,string有的。
- if中少了l++和r--导致的就是死循环。
string tool="aoeiuAOEIU";
while(i<j)
{
while(tool.find(s[i])==-1&&i<j)
class Solution {
public:
string reverseVowels(string s) {
string aoe = "aoeiuAOEIU";
unordered_set<char> dict;
for(auto& a: aoe) dict.insert(a);
int l =0;
int r = s.size()-1;
while(l<r){
if(dict.find(s[l])!=dict.end() && dict.find(s[r])!=dict.end()){
swap(s[l], s[r]);//
l++;
r--;
}
if(dict.find(s[l])==dict.end()) l++;
if(dict.find(s[r])==dict.end()) r--;
}
return s;
}
};
541.
通俗一点说,每隔k个反转k个,末尾不够k个时全部反转;
45 / 60 个通过测试用例
- 这个helper就是一个reverse函数!!
- 双指针太麻烦了,不必要。
class Solution {
public:
string reverseStr(string s, int k) {
int l =0;
int n = s.size();
int r = k> n? n-1:k-1;
while(r<n){//可以到达倒数第一个n-1
helper(s, l, r);
l += 2*k;
r += 2*k;
}
return s;
}
void helper(string& s, int l, int r){ //只进行反转
while(l< r){
swap(s[l], s[r]);
l++;
r--;
}
}
};
//不知道前一个为何只通过??
class Solution {
public:
string reverseStr(string s, int k) {
int i=0;
int n = s.size();
while(i<n){
if(i+k<n) reverse(s.begin()+i, s.begin()+i+k);
else reverse(s.begin()+i, s.end());
i += 2*k;
}
return s;
}
};