LeetCode算法題-Goat Latin Easy(Java實(shí)現(xiàn))

這是悅樂書的第322次更新,第344篇原創(chuàng)

01 看題和準(zhǔn)備

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

山羊拉丁的規(guī)則如下:

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

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

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

返回表示從S轉(zhuǎn)換為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僅包含大寫字母,小寫字母和空格。每個(gè)單詞之間只有一個(gè)空格。

  • 1 <= S.length <= 150。

本次解題使用的開發(fā)工具是eclipse,jdk使用的版本是1.8,環(huán)境是win7 64位系統(tǒng),使用Java語言編寫和測(cè)試。

02 解題

題目的意思很明確,根據(jù)給定的三條轉(zhuǎn)換規(guī)則,將字符串S進(jìn)行轉(zhuǎn)換,最后要求輸出轉(zhuǎn)換后的字符串。

第一步,先將字符串S根據(jù)空格拆分為字符串?dāng)?shù)組,同時(shí)定義幾個(gè)局部變量。

第二步,遍歷字符串?dāng)?shù)組,判斷每個(gè)字符串的首字母是否為元音字母,如果是元音字母,就根據(jù)規(guī)則1和3拼接新字符串,反之根據(jù)規(guī)則2和3拼接新字符串。拼接新的字符串時(shí),要帶上空格。

第三步,將StringBuilder對(duì)象轉(zhuǎn)為字符串,并且進(jìn)行截取,去掉最后的空格,作為結(jié)果返回。

public String toGoatLatin(String S) {
    if (S.trim().length() == 0) {
        return S;
    }
    StringBuilder sb = new StringBuilder();
    // 根據(jù)空格拆分為字符串?dāng)?shù)組
    String[] arr = S.split(" ");
    String suffix = "";
    for (String str : arr) {
        // 累計(jì)的后綴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 小結(jié)

算法專題目前已日更超過五個(gè)月,算法題文章192+篇,公眾號(hào)對(duì)話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集。

以上就是全部?jī)?nèi)容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點(diǎn)贊、留言、轉(zhuǎn)發(fā)就是對(duì)我最大的回報(bào)和支持!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,060評(píng)論 0 2
  • Unicode?標(biāo)準(zhǔn)附錄#9 UNICODE雙向算法#### 摘要#### 本附件是一份關(guān)于字符定位的規(guī)范,主要描...
    Eriice閱讀 5,203評(píng)論 0 6
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,683評(píng)論 0 4
  • 本文首發(fā)于我的個(gè)人博客:尾尾部落 1. KMP 算法 談到字符串問題,不得不提的就是 KMP 算法,它是用來解決字...
    繁著閱讀 4,675評(píng)論 0 28
  • 原本以為上映遙遙無期的《芳華》,終于在昨天上映了。 比較敏感的題材和做出妥協(xié)的主題,最終讓這部影片變得十分中規(guī)中矩...
    江旅閱讀 898評(píng)論 0 2

友情鏈接更多精彩內(nèi)容