【发布时间】:2015-06-25 18:46:26
【问题描述】:
我一直在处理以下递归问题,但一直无法弄清楚。基本上,您有某种由某些单词组成的句子,其中所有单词只是卡在一起,而不是间隔开。这个想法是找到可用于创建句子的所有可能的单词组合的数量。
例如,
- 单词:ok,okook
- 句子:ookookook
- 解决方案:{ook, ook, ook}, {ookook, ook}, {ook, ookook}。
另一个例子:
- 单词:ooga、oogam、oogum、mook、ok
- 句子:oogamookoogumook
- 解决方案:{ooga, mook, oogum, ook}, {oogam, ook, oogum, ook}
我尝试了很多东西,最后放弃并尝试手动完成......
public static int WAYS(String word) {
int ways = 1;
for (int i = 0; i < word.length(); i++) {
try{
if(word.substring(i, i - 2).equals("ug")){
if(word.substring(i - 4, i - 2).equals("ug")){
ways++;
}
}
else if(word.substring(i, i - 3).contains("ook")){
System.out.println(word.substring(i-6, i-3));
if(word.substring(i - 6, i - 3).equals("ook")){
ways++;
}
if(word.charAt(i - 4) == 'm'){
if(word.substring(i - 8, i - 4).equals("ooga") || word.substring(i - 8, i - 4).equals("oogu")){
ways++;
}
}
}
else if(word.substring(i, i - 4).contains("mook")){
if(word.substring(i - 8, i - 4).contains("mook")){
ways++;
}
}
if(word.substring(i, i - 2).equals("oog")){
if(word.charAt(i + 2) == 'm'){
if(word.charAt(i + 1) == 'a' || word.charAt(i + 1) == 'u'){
ways++;
}
}
}
} catch(Exception e){
continue;
}
}
return ways;
}
但它没有奏效。有人可以给我一个关于使用递归解决这个问题的想法或示例吗?
【问题讨论】:
-
你能展示你的递归尝试吗?你真的,真的需要在这个问题上使用递归。像您发布的那样的非递归解决方案是行不通的。
-
@JohnKugelman 我的递归尝试真的很糟糕,因为我不明白如何用递归正确解决这个问题。我只需要了解如何处理这些类型的问题的基础知识。
标签: java string recursion dynamic-programming