題目: LeetCode - 824. Goat Latin

題目說明

給一個字串,將字串中的每個單詞拆開並根據題目的規則修改單詞的內容。
規則如下:

  • 若是單詞的開頭為母音則在單詞的結尾加上 "ma"
  • 若是單詞的開頭不為母音則將單詞的開頭移到單詞的結尾並加上 "ma"
  • 在第一個單詞的結尾加上 'a',第二的單詞的結尾加上 "aa"…。

解題思路

題目的三個規則可以簡化成兩個步驟:

  1. 若是單詞的開頭不為母音則將單詞的開頭移到單詞的結尾。
  2. 在單詞的結尾加上 "ma" 及對應數量的 'a'

定義一個 String _append 作為每次都必須加上的結尾,使用 StringStream 將字串的單詞拆開,每次先判斷單詞的開頭是否不為母音,若是的話就將開頭移到結尾,最後加上 _append 及更新 _append 即可。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
string toGoatLatin(string S) {
stringstream ss(S);
string tmp, res, _append = "ma";
while(ss >> tmp)
{
if(!isVowel(tolower(tmp[0]))) tmp += tmp[0], tmp.erase(tmp.begin());
res += tmp + (_append += 'a') + ' ';
}
return res.substr(0, res.size() - 1);
}
private:
inline bool isVowel(char c) { return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; }
};