
題目解析:現在有一個花園,我要中n朵花,但花不能兩株中在一起,所以現在要幫忙判斷花園的空間是否可以種n朵花,0代表空的,1代表已經種花了
解題思路:先設一個vector來做計算用,並在陣列的前後都各家上一個0,這樣就能直接拿原本陣列去做計算,不用擔心會超出陣列範圍的問題
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
vector<bool> v;
v.push_back(0);
v.insert(v.end(), flowerbed.begin(), flowerbed.end());
v.push_back(0);
for(int i=1; i<v.size()-1 && n != 0; i++){
if(!(v[i-1] || v[i] || v[i+1])){
v[i] = 1;
n--;
}
}
if(n == 0) return 1;
else return 0;
}
};

題目解析:現在有一個字串s,我們需要將字串中的母音(包含大小寫)的順序去整個做反轉
解題思路:先設兩個數字i,j去紀錄等等到哪個位置,i負責紀錄前面的數字,j負責紀錄後面的數字,然後如果i跟j同時都是母音就進行交換,如果不是母音的+-1,是母音的就不要動
class Solution {
public:
string reverseVowels(string s) {
int i=0, j=s.size()-1;
set<char> v{'a','e','i','o','u','A','E','I','O','U'};
while(i < j){
if(!v.count(s[i])) i++;
if(!v.count(s[j])) j--;
if(v.count(s[i]) && v.count(s[j])){
swap(s[i], s[j]);
i++, j--;
}
}
return s;
}
};

題目解析:現在有一個句子s,我們需要將句子中的單詞位置倒過來,並將多餘的空白進行刪除
解題思路:先將s打包成stringstream,這樣我們就可以直接用getline去切割整個字串,然後記得如果有連續兩個空白時,他會多切割一個"",而不是" ",小細節要注意,當while跑完後記得將最後多出來的空白進行刪除
class Solution {
public:
string reverseWords(string s) {
string ans = "";
stringstream S(s);
while(getline(S, s, ' ')){
if(s != "") ans = s + " " + ans;
}
ans.erase(ans.size()-1, 1);
return ans;
}
};