1. 程式人生 > 其它 >Leetcode 824 山羊拉丁文

Leetcode 824 山羊拉丁文

LC 824 山羊拉丁文

題目描述

Link

給你一個由若干單片語成的句子 sentence ,單詞間由空格分隔。每個單詞僅由大寫和小寫英文字母組成。

請你將句子轉換為 “山羊拉丁文(Goat Latin)”(一種類似於 豬拉丁文 - Pig Latin 的虛構語言)。山羊拉丁文的規則如下:

  • 如果單詞以母音開頭('a', 'e', 'i', 'o', 'u'),在單詞後新增"ma"
    • 例如,單詞 "apple" 變為 "applema"
  • 如果單詞以子音字母開頭(即,非母音字母),移除第一個字元並將它放到末尾,之後再新增"ma"。

    • 例如,單詞 "goat" 變為 "oatgma" 。
  • 根據單詞在句子中的索引,在單詞最後新增與索引相同數量的字母'a',索引從 1 開始。

    • 例如,在第一個單詞後新增 "a" ,在第二個單詞後新增 "aa" ,以此類推。

返回將 sentence 轉換為山羊拉丁文後的句子。

示例 1:

輸入:sentence = "I speak Goat Latin"
輸出:"Imaa peaksmaaa oatGmaaaa atinLmaaaaa"

示例 2:

輸入:sentence = "The quick brown fox jumped over the lazy dog"
輸出:"heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"

題意

給定一個字串, 處理每個單詞,一共三種做法

  1. 如果單詞首字母為母音,則在單詞尾部加上"ma"。例如:"apple"->"applema"
  2. 如果單詞首字母不為母音, 則將單詞首字母挪到單詞末尾拼接, 再在尾部新增"ma"。例: "peach" -> "eachpma"。
  3. 不管單詞字母是母音或者子音,在做完上述操作後可以針對單詞下標進行操作,如果單詞下標為1, 則進行操作1或2後要加上對應下標數量的a。例:"I am peach" -> I下標為1,且執行操作1, I + "ma" + "a" -> "Imaa", am下標為2, 且執行操作1, am + "ma" + "aa" -> "ammaaa", peach下標為3, 且執行操作2, peach -> eachp + "ma" + "aaa" -> "eachpmaaaa

做法

O(n)模擬: 資料範圍並不大,比較麻煩處理的是分割單詞以及單詞對應下標。可以設定一個字串word記錄當前單詞,在遇到空格前一直給字串word累加,那麼遇到空格後,我們判定字串不為空的情況下去判斷首字母是否為母音, 母音則執行操作1再執行操作3,否則執行操作2再執行操作3, 在執行完操作後,我們設定給定加在尾部對應的下標字串"a", 進行累加, 即遇到一個單詞後加入到尾部後更新"aa", 這樣處理需要對最後一個單詞進行特判,迴圈一遍字串後,判斷單詞字串word是否為空,不為空則依舊進行操作1or2後再加上下標字串"a"即可。

class Solution {
public:
    string toGoatLatin(string s) {
        string res = "";
        string word = "";
        string tail = "a";
        string dict = "aeiouAEIOU";
        for (int i = 0; i < s.size(); i ++) {
            if (s[i] == ' ') {
                if (word.size()) { // 判斷確實存在單詞
                    if (dict.find(word[0]) == -1) // 判斷單詞首字母是否為母音
                        word += word[0], word.erase(word.begin()); // 對子音的處理
                    res += word;  
                    res += "ma";
                    res += tail;
                    res += " "; 
                    tail += "a";
                }
                word = ""; //將word釋放,用於記錄下一個單詞
            } else {
                word += s[i];
            }
        }
        // 對句子中最後一個單詞進行處理,因為最後一個單詞不會遇到空格
        if (word.size()) {
            if (dict.find(word[0]) == -1)
                word += word[0], word.erase(word.begin()); // 對子音的處理
            res += word;  
            res += "ma";
            res += tail;
        }
        return res;
    }
};