gpt4 book ai didi

java - Unscramble Letters in Java - 获取所有可能的字母组合

转载 作者:搜寻专家 更新时间:2023-11-01 02:46:45 26 4
gpt4 key购买 nike

已解决:我要问的是已解决,但请随时使用其他方法回答。这是用答案制作的字母解读器。 Project Page

我目前是一名 AP 计算机科学专业的学生。我一直在研究一个字母解读器,它在字典中读取并打印输入的字母集可能的单词列表。为此,我用 Map<String,Set<String>> 制作了一张 map 。其中“earth”将在键“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

我遇到的问题是一些关键值没有被检查,因为目前我接受一组数字并将字符按字母顺序排列例如地球->aehrt然而这会跳过诸如 aht->hat 或 eht -> the 之类的组合。

所以基本上我的问题是如何简化获取包含在这样一个键中的所有字母组合的过程。例如 earth-> aehrt,a,ae,aeh,aehr,ah,ahr,ahrt,aer,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”开始,您可以使用以下方法找到所有可能的字母组合:

  1. 开始于: S<sub>0</sub> = {}
  2. 接下来,走a : S<sub>1</sub> = a⋅S<sub>0</sub> ∪ S<sub>0</sub> ∪ {a} = {a}
  3. 接下来,走e : S<sub>2</sub> = e⋅S<sub>1</sub> ∪ S<sub>1</sub> ∪ {e} = {ae, a, e}
  4. 接下来,走h : S<sub>3</sub> = h⋅S<sub>2</sub> ∪ S<sub>2</sub> ∪ {h} = {aeh, ah, eh, ae, a, e, h}
  5. 等...

一旦你有S<sub>5</sub> (整组组合)对照你的 map 检查它们。


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]

关于java - Unscramble Letters in Java - 获取所有可能的字母组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com