1 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
我認(rèn)為實(shí)現(xiàn)算法的關(guān)鍵是選擇正確的數(shù)據(jù)結(jié)構(gòu)。我認(rèn)為正確的數(shù)據(jù)結(jié)構(gòu)是Map。鍵Map
將是Integer
(因?yàn)殒I不能是原語,所以它不能是int
),它將是字母的索引,值將是在該索引處具有相關(guān)字母的單詞列表。
這是我根據(jù)您詳細(xì)說明的規(guī)范和限制實(shí)現(xiàn)該算法的代碼。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HangsMan {
? ? public static void main(String[] args) {
? ? ? ? String[] words = new String[]{"fish", "look", "flow", "fowl", "cool", "eel", "poll", "fill"};
? ? ? ? char letter = 'l';
? ? ? ? Map<Integer, List<String>> theMap = new HashMap<>();
? ? ? ? Integer key;
? ? ? ? List<String> value;
? ? ? ? for (String word : words) {
? ? ? ? ? ? int ndx = word.indexOf(letter);
? ? ? ? ? ? int last = word.lastIndexOf(letter);
? ? ? ? ? ? if (last == ndx + 1) {
? ? ? ? ? ? ? ? ndx += 1_000_000;
? ? ? ? ? ? }
? ? ? ? ? ? key = Integer.valueOf(ndx);
? ? ? ? ? ? if (theMap.containsKey(key)) {
? ? ? ? ? ? ? ? value = theMap.get(key);
? ? ? ? ? ? }
? ? ? ? ? ? else {
? ? ? ? ? ? ? ? value = new ArrayList<String>();
? ? ? ? ? ? ? ? theMap.put(key, value);
? ? ? ? ? ? }
? ? ? ? ? ? value.add(word);
? ? ? ? }
? ? ? ? theMap.forEach((k, v) -> System.out.println(v));
? ? }
}
請(qǐng)注意,雙字母單詞會(huì)在索引中添加 1_000_000(一百萬),以便將它們與單字母單詞分開。因此, “poll”一詞的索引將為 1,000,002,而“ cold”一詞的索引僅為 2。
你問我為什么要加一百萬?因?yàn)?,根?jù)維基百科,英語中最長(zhǎng)的單詞包含189,819 個(gè)字母。
添加回答
舉報(bào)