【发布时间】:2018-03-03 16:36:37
【问题描述】:
问题如下:你从一个2个字母的单词开始,你可以在单词的前面和后面附加字母。您必须返回字典中存在的最长单词,您可以通过在 2 个字母单词的前后附加字母来形成该单词,并且您形成的每个新单词也必须在字典中
例如: 开始:'at'
字典:[帽子、聊天、聊天、老鼠、评分、橙色]
输出:'chats',因为:at -> hat -> chat -> chats
我的代码如下:
public static String longest(ArrayList<String> input) {
return helper('at', dict);
}
public static String helper(String in, ArrayList<String> dict) {
ArrayList<String> maxes = new ArrayList<String>();
for (char a = 'a'; a < 'z'; a++) {
String front = Character.toString(a) + in;
String back = in + Character.toString(a);
if (dict.contains(front)) {
maxes.add(helper(front, dict));
}
if (dict.contains(back)) {
maxes.add(helper(back, dict));
}
}
if (maxes.size() == 0) {
return in;
}
String word = "";
for (String w : maxes) {
if (w.length() > word.length()) {
word = w;
}
}
return word;
}
我想知道这个算法的时间复杂度是多少?我一辈子都想不通。
【问题讨论】:
-
评论,因为它没有回答关于你的算法的问题——但我想我会向后工作,假设意图是这适用于全长字典。将字典预处理为 (ap/pre)pend 链的有向图。然后要检查一个单词,只需找到输入节点的子节点即可。
标签: java string recursion time time-complexity