【发布时间】:2019-03-16 00:18:49
【问题描述】:
我正在尝试解决给定一串摩尔斯电码字符在字典中找到有意义的单词的问题
例如
这个输入字符串“..-.----..-.-.........-.--”应该翻译成“狐狸懒惰”,可能有多种其他翻译,但是这是一种可能的解决方案,因为这两个词出现在英语词典中。
我写了 2 个函数,TranslateMorse 和 SegmentString。 SegmentString 拆分一个英文字符串并在字典中查找所有有意义的单词。例如,如果输入是“foxlazy”,该函数可以找到“fox”和“lazy”是字典中存在的 2 个有意义的词。
TranslateMorse 实际上应该将莫尔斯电码输入“..-.----..-.-....---..-.--”转换为“foxlazy”,以便 SegmentString 给出结果输出,但棘手的部分是摩尔斯电码翻译不是直截了当的,它给了我很多翻译。
我该如何解决这个问题?
import java.util.*;
public class MorseCode {
String TranslateMorse(String input, Map<String, String> morse) {
// "-.-..-.--..--...-....---"
if (morse.containsKey(input))
return morse.get(input);
int len = input.length();
for (int i = 1; i < len; i++) {
String prefix = input.substring(0, i);
if (morse.containsKey(prefix)) {
String suffix = input.substring(i, len);
String segSuffix = SegmentString(suffix, morse);
if (segSuffix != null) {
return morse.get(prefix) + segSuffix;
}
}
}
return null;
}
String SegmentString(String input, Set<String> dict) {
if (dict.contains(input))
return input;
int len = input.length();
for (int i = 1; i < len; i++) {
String prefix = input.substring(0, i);
if (dict.contains(prefix)) {
String suffix = input.substring(i, len);
String segSuffix = SegmentString(suffix, dict);
if (segSuffix != null) {
return prefix + " " + segSuffix;
}
}
}
return null;
}
// Driver method
public static void main(String args[]) {
Map<String, String> morse = new HashMap<>();
morse.put(".-", "a");
morse.put("-...", "b");
morse.put("-.-.", "c");
morse.put("-..", "d");
morse.put(".", "e");
morse.put("..-.", "f");
morse.put("--.-", "g");
morse.put("....", "h");
morse.put("..", "i");
morse.put(".---", "j");
morse.put("-.-", "k");
morse.put(".-..", "l");
morse.put("--", "m");
morse.put("-.", "n");
morse.put("---", "o");
morse.put(".--.", "p");
morse.put("--.-", "q");
morse.put(".-.", "r");
morse.put("...", "s");
morse.put("-", "t");
morse.put("..-", "u");
morse.put("...-", "v");
morse.put(".--", "w");
morse.put("-..-", "x");
morse.put("-.--", "y");
morse.put("--..", "z");
Set<String> dict = new HashSet<>();
dict.add("apple");
dict.add("honey");
dict.add("fox");
dict.add("quick");
dict.add("jumped");
dict.add("bill");
dict.add("jam");
dict.add("holy");
dict.add("mega");
dict.add("lazy");
// fox lazy
String input = "..-.----..-.-...---..-.--";
MorseCode m = new MorseCode();
String alpha = m.TranslateMorse(input, morse);
System.out.println(alpha);
System.out.println(m.SegmentString(alpha, dict));
}
}
【问题讨论】:
标签: java recursion morse-code