LeetCode算法題-Goat Latin Easy(Java實現)

這是悅樂書的第322次更新,第344篇原創

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第192題(順位題號是824)。給出句子S,由空格分隔的單詞組成。每個單詞僅由小寫和大寫字母組成。我們想將句子轉換爲"Goat Latin"(一種類似於Pig Latin的僞造語言)。

山羊拉丁的規則如下:

(1)如果單詞以元音(a,e,i,o或u)開頭,則在單詞的末尾附加"ma"。例如,"apple"這個詞就變成了"applema"。

(2)如果一個單詞以輔音(即不是元音)開頭,則刪除第一個字母並將其追加到末尾,然後添加"ma"。例如,"goat"這個詞就變成了"oatgma"。

(3)在句子的每個單詞的末尾添加一個字母'a',從1開始。例如,第一個單詞將"a"添加到結尾,第二個單詞將"aa"添加到結尾,依此類推。

返回表示從S轉換爲Goat Latin的最終句子。

例如:

輸入:"I speak Goat Latin"

輸出:"Imaa peaksmaaa oatGmaaaa atinLmaaaaa"


輸入:"The quick brown fox jumped over the lazy dog"

輸出:"heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"


注意

  • S僅包含大寫字母,小寫字母和空格。每個單詞之間只有一個空格。

  • 1 <= S.length <= 150。

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 解題

題目的意思很明確,根據給定的三條轉換規則,將字符串S進行轉換,最後要求輸出轉換後的字符串。

第一步,先將字符串S根據空格拆分爲字符串數組,同時定義幾個局部變量。

第二步,遍歷字符串數組,判斷每個字符串的首字母是否爲元音字母,如果是元音字母,就根據規則1和3拼接新字符串,反之根據規則2和3拼接新字符串。拼接新的字符串時,要帶上空格。

第三步,將StringBuilder對象轉爲字符串,並且進行截取,去掉最後的空格,作爲結果返回。

public String toGoatLatin(String S) {
    if (S.trim().length() == 0) {
        return S;
    }
    StringBuilder sb = new StringBuilder();
    // 根據空格拆分爲字符串數組
    String[] arr = S.split(" ");
    String suffix = "";
    for (String str : arr) {
        // 累計的後綴a
        suffix += "a";
        // 拼接新的字符串,需要帶上空格
        if (isVowelLetter(str.charAt(0))) {
            sb.append(str + "ma" + suffix +" ");
        } else {
            sb.append(str.substring(1, str.length()) +
                    str.charAt(0) + "ma" + suffix +" ");
        }
    }
    // 去掉最後面的空格
    return sb.toString().substring(0, sb.length()-1);
}

/**
 * 判斷是否爲元音字母
 * @param ch
 * @return
 */
public boolean isVowelLetter(char ch){
    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || 
            ch == 'u' || ch == 'A' || ch == 'E' || ch == 'I' || 
            ch == 'O' || ch == 'U') {
        return true;
    }
    return false;
}


03 小結

算法專題目前已日更超過五個月,算法題文章192+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章