這是悅樂書的第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)和支持!