1 回答
TA贡献1856条经验 获得超11个赞
我认为实现算法的关键是选择正确的数据结构。我认为正确的数据结构是Map。键Map
将是Integer
(因为键不能是原语,所以它不能是int
),它将是字母的索引,值将是在该索引处具有相关字母的单词列表。
这是我根据您详细说明的规范和限制实现该算法的代码。
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));
}
}
请注意,双字母单词会在索引中添加 1_000_000(一百万),以便将它们与单字母单词分开。因此, “poll”一词的索引将为 1,000,002,而“ cold”一词的索引仅为 2。
你问我为什么要加一百万?因为,根据维基百科,英语中最长的单词包含189,819 个字母。
添加回答
举报