【发布时间】:2022-01-08 19:10:18
【问题描述】:
如何使用预先给定的字符串列表来分隔字符串,并用空格分隔它们?
例如:
单词列表:words = {"hello", "how", "are", "you"}
我要分离的字符串:text = "hellohowareyou"
public static String separateText(String text, List<String> words) {
String new_text;
for (String word : words) {
if (text.startsWith(word)) {
String suffix = text.substring(word.length()); //'suffix' is the 'text' without it's first word
new_text += " " + word; //add the first word of the 'string'
separateString(suffix, words);
}
}
return new_text;
}
而new_text 应该返回hello how are you
请注意,words 列表的顺序可能不同,并且包含更多单词,例如字典。
如果需要,我如何进行这种递归?
【问题讨论】:
-
按照Oracle's naming conventions for Java,你应该用camelCase命名局部变量。
-
如果文本是“ihoweverywhere”并且字典包含诸如[“ever”、“every”、“how”、“however”、“where”之类的词,您是否有如何消除歧义的规则, “everywhere”] 给定的顺序没有定义?
-
我的解决方案将按照单词在单词列表中的顺序消除歧义。位于列表开头的单词优先。如果您希望较长的单词优先,您可以按自然降序(或简单地按长度降序)对单词进行排序。
-
如果这些词是 ["now", "here", "no", "where"]。您将如何拆分“无处”?它是首先找到的最短单词,所以分成“no”和“where”?如果首先选择最短的单词会导致死胡同,是否必须支持backtracking - 例如,如果输入是“nownow”,选择“no”会留下无法拆分的“wnow”?还是首先选择最短的单词(如果这是行为)保证不需要回溯?
-
@Ma3x 排序如果没有 OP 为我们提供独特的规则集(即
rangeofanorange不能正确间隔我们提供[an, of, or, range, orange]的任何顺序),但除此之外您的解决方案还有 O( n * m) 时间复杂度(m - 文本长度,n - 字典大小)我同意这至少是一个很好的起点
标签: java string list recursion