這是悅樂書的第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+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!