解决了:我问的是解决了但是可以随意用其他方法回答.
这是用解答写的字母解码器. Project Page
我目前是AP计算机科学专业的学生.我一直在研究一个字母解读器,它读取字典并打印输入字母集可能的单词列表.为此,我使用Map< String,Set< String>>制作地图.
其中“地球”将在关键字“aerht”和相应的集合中输入.
Example How Would I generate all of these:
CAKE -> ACEK
A C E K
AC CE EK
ACE CEK
ACEK
AE CK
AEK
ACK
AK
我遇到的问题是,目前没有检查一些键值,我接受一组数字并按字母顺序排列字符
例如earth-> aehrt
但是这会跳过诸如aht-> hat或者eht之类的组合 – >的.
所以基本上我的问题是如何简化获得这种密钥中包含的所有字母组合的过程.例如地球 – > aehrt,一,AE,AEH,aehr啊,AHR,ahrt,爱尔兰,AERT
依此类推,以便我可以将所有这些键与我读过的字典中的那些键交叉引用.
letters []按顺序包含a,e,h,r,t.另外,test是Set的ArrayList.关键是“aehrt”.
for(int z = 0; z<key.length();z++) {
Set<String> temp = new HashSet<String>();
//s1 = t*s0 ∪ {t} ∪ s0 = {t}
for(String str: test.get(z)) //t*s0
str+=letters[z];
test.get(z).add(letters[z]); //{t}
test.get(z).addAll(test.get(z-1));//s0
test.get(z).addAll(temp);
}
解决方法:
从字母顺序键’aehrt’开始,您可以使用以下方法找到所有可能的字母组合:
>开始于:S0 = {}
>接下来,取a:S1 =a⋅S0∪S0∪{a} = {a}
>接下来,取e:S2 =e⋅S1∪S1∪{e} = {ae,a,e}
>接下来,取h:S3 =h⋅S2∪S2∪{h} = {aeh,ah,eh,ae,a,e,h}
>等……
一旦你有了S5(整套组合),就可以在你的地图上检查它们.
public static void main(String... args){
Set<String> set = new TreeSet<String>();
String key = "aehrt";
//S1 = c*S0 ∪ {c} ∪ S0
for(int z = 0; z < key.length();z++) {
Set<String> temp = new HashSet<String>();
char c = key.charAt(z);
for(String str: set)
temp.add(str + c); // ∪ c*S0
set.add(c+""); // ∪ {c}
set.addAll(temp); // ∪ S0
}
System.out.println(set);
}
output: [a, ae, aeh, aehr, aehrt, aeht, aer, aert, aet, ah, ahr, ahrt, aht, ar, art,
at, e, eh, ehr, ehrt, eht, er, ert, et, h, hr, hrt, ht, r, rt, t]