我有这个问题需要解决
来自用户的输入词由两个不同的词组成,如
AppleCake or BrownPie
现在我们需要开发一个程序,它将获取此输入并将其与单词库相匹配,并将其分解为有意义的部分,即Apple和Cake
输入:AppleCake
输出:此输入有两个单词Apple和Cake
输入:RedGrapesWine
输出:此输入有三个单词Red,Grapes和Wine
我的问题是:
我该如何开始解决这个问题?
任何人都可以帮我解决伪代码/步骤吗?
答案 0 :(得分:1)
一种非常简单的方法,只有在你的单词数量很少的情况下才能迭代单词列表并尝试逐字匹配。
这是一个非常基本的例子(不处理案例,也不处理多次出现的单词或其他内容),但它会告诉你如何做:
String input = readFromUser();
String[] dictionary = new String[] { "Apple", "Cake" };
List<String> found = new ArrayList<>();
for (String word : dictionary) {
int index = input.indexOf(word);
if (index >= 0) {
input = input.substring(0, index) + input.substring(index + word.length());
found.add(word);
}
}
System.out.println("Found " + found.size() + " words: " + found);
这是非常简单的方法,因为它很耗时。
另一种方法是使用Trie并导航它,直到找到正确的词(应该是更好的方法)。
答案 1 :(得分:1)
要改进算法,首先应创建一个包含字典所包含的所有单词开头的集合。如果“Apple”和“Cake”在字典中,则该集合必须包含“A”,“Ap”,“App”,“Appl”,“Apple”,“C”,“Ca”和“Cake”。
所以如果一个令牌不能成为一个单词,你会很快看到它,因为它开始与一个已知单词的开头不匹配。
答案 2 :(得分:0)
如果新单词使用大写字母,您可以使用它将单词分解成您想要的单词。
答案 3 :(得分:0)
一个简单的解决方案是针对hashmap / dictionary测试每个可能的分区。
e.g。
thebody - &gt;他((和他的身体存在吗?),身体(和身体?),身体(和身体?)等等。