【发布时间】:2019-07-07 21:24:27
【问题描述】:
我遇到了一个问题。我有一个由String[]={"eat", "tea", "tan", "ate", "nat", "bat"} 组成的字符串数组,现在,我应该将那些具有相同字母的单词分开并组成一个组。 eat,tea,ate 每个单词都有相同的字母,所以这是一个组。第 2 组应为 tan,nat,第 3 组应为 bat。所以我必须列出一个列表来存储这些组。
我的做法:
为了解决这个问题,我首先找出每个字母的 ascii 值,然后将这些 ascii 值添加到一个单词中。像eat 一样找出e,a,t 的ascii 值并添加它们。我采用这种方法是因为如果字母在单词中重复,那么它们必须具有相同的 ascii 总和。之后,我将它们分组为相同的 Ascii 总和,并找出哪些单词具有这些总和,然后它们属于同一组。
我的进步 我找出 ascii 总和并将它们放入哈希图中。但后来我无法对相同的值进行分组。由于我未能对 ascii 值进行分组,因此我找不到单词。我不知道如何进行。
我也关注这个帖子
但是那里的方法和我的方法不一样。而且问题和我的不一样。我在这里讨论的是一种不同的方法,它取决于 ASCII 值。
我的代码:
public List<List<String>> groupAnagrams(String[] strs) {
ArrayList<Character>indivistr=new ArrayList<>();
ArrayList<Integer>dup=new ArrayList<>();
HashMap<Integer,Integer>mappingvalues=new HashMap<>();
for(int i=0;i<strs.length;i++){
int len=strs[i].length();
int sum=0;
for(int j=0;j<len;j++){
indivistr.add(strs[i].charAt(j));
int ascii=(int)strs[i].charAt(j);
sum=sum+ascii;
}
mappingvalues.put(i,sum);
}
}
另一种方法 我在 Arraylist 中传输映射键并在 ArrayList 中映射值。类似的,
ArrayList<Integer>key_con=new ArrayList<
(mappingvalues.keySet());
ArrayList<Integer>val_con=new ArrayList<>(mappingvalues.values());
然后使用两个循环并将相同的值放入另一个列表中。
for(int k=0;k<val_con.size();k++){
for(int k1=k+1;k1<val_con.size();k1++){
if(val_con.get(k).equals(val_con.get(k1))){
dup.add(val_con.get(k1));
}
}
现在,如果我打印 dup 输出将是 [314, 314, 314, 323],这是部分正确的。应该是314,314,314,323,323,311
【问题讨论】:
-
“健康的讨论总是受欢迎的。”
-
您是否尝试过使用其他变量。因此,您将初始单词放入该变量。现在遍历所有单词。对于每个单词,对于您检查的每个字母是否在您保存的单词中 - 如果您错过了继续。 (如果字母可能在一个单词中出现多次,则每个字母可能需要一些计数器)
-
相关(老实说,我很想将其视为骗子:stackoverflow.com/q/15045640/1079354)
-
@JoeC 有时我观察到,当有人在这里提问时。他或她得到了这样的答案我们不解决家庭作业。所以,我认为,写下一个完整的代码可能会超出规则。所以我鼓励讨论。