這是一個簡單的問題,描述為:
給你一個 0 索引的字串單字陣列和一個字元 x。
傳回表示包含字元 x 的單字的索引陣列。
請注意,傳回的陣列可以是任意順序。
範例1:
輸入:words = ["leet","code"], x = "e"
輸出:[0,1]
解釋:「e」出現在兩個單字:「leet」和「code」。因此,我們返回索引 0 和 1。範例2:
輸入:words = ["abc","bcd","aaaa","cbc"], x = "a"
輸出:[0,2]
解釋:「a」出現在「abc」和「aaaa」。因此,我們返回索引 0 和 2。範例3:
輸入:words = ["abc","bcd","aaaa","cbc"], x = "z"
輸出:[]
解釋:「z」未出現在任何單字。因此,我們傳回一個空數組。限制:
1
1
x 是小寫英文字母。
words[i] 僅由小寫英文字母組成。
要解決這個問題,您需要迭代單字列表,在每個單字上檢查是否包含字符,如果是,則將其索引儲存到回應列表中:
class Solution { public List<Integer> findWordsContaining(String[] words, char x) { // create response final List<Integer> indexes = new ArrayList<>(); // iterate words string array for(int i=0;i<words.length;i++){ // check if char exists into the word if(words[i].indexOf(x) != -1){ indexes.add(i); // if yes add index into the response } } // return searched indexes return indexes; } }
運行時間:1ms,比Java線上提交的100.00%快。
記憶體使用:44.95 MB,低於 Java 線上提交的 49.76%。
—
如果您想採用 lambda/函數方法,這種方法通常更乾淨,但對效能的影響更大,它看起來像這樣:
class Solution { public List<Integer> findWordsContaining(String[] words, char x) { return IntStream.range(0, words.length) .boxed() // convert primitive into Class related (int -> Integer) .map(i -> getIndexIfCharExistsInWord(words[i], i, x)) .filter(Objects::nonNull) // to remove null ones from mapping .collect(Collectors.toList()); } public Integer getIndexIfCharExistsInWord(final String word, final int i, final char x) { return word.indexOf(x) != -1 ? i : null; } }
運行時間:9ms,比 Java 線上提交的 2.72% 快。
記憶體使用:44.90 MB,低於 Java 線上提交的 66.32%。
—
就是這樣!如果還有什麼要討論的,請隨時發表評論,如果我錯過了任何內容,請告訴我,以便我進行相應更新。
直到下一篇文章! :)
以上是Leetcode — 尋找包含字元的單字的詳細內容。更多資訊請關注PHP中文網其他相關文章!