我有
b a,
c b,
c a,
d e
对并作为输出想要打印
a - group 1,
b - group 1,
c - group 1,
d - group 2,
e - group 2
您能否提供一些提示,如何使用 java 解决此问题。谢谢!
使用 TreeMap<String, Group> ,其中键是元素名称 (a, b ..),值是组(可以包含组编号以及您需要了解的任何其他信息)。
尝试首先找到该组。如果找不到,请创建一个新组并将其放入地图中。最后,只需遍历条目集以打印键值对。
我不会为您发布代码,因为这看起来像一个家庭作业。
我会用一个List<Set<String>>
.
对于每一对,扫描您的组数组以查找其中任何一对是否已经在组中。如果是则添加另一个。
将其中一个或另一个添加到组后,您需要进行另一次扫描以查看添加的一个是否存在于另一个组中。如果是,则必须合并两个组。
如果这对中的任何一项都没有找到,那么您就有了一个新组,将两者都添加到其中并将其添加到您的列表中。
这段代码似乎工作:
public class Test {
public static void main(String args[]) {
new Test().test();
}
// Might be better to use a LinkedList here.
List<Set<String>> groups = new ArrayList<>();
// Keeps track of what we added and where.
private static class Added {
final int where;
final String what;
public Added(int where, String what) {
this.where = where;
this.what = what;
}
}
// Add if allowed.
Added add(Set<String> group, int where, String has, String what) {
if (group.contains(has)) {
group.add(what);
return new Added(where, what);
}
return null;
}
void addPair(String a, String b) {
// Is ether of the strings in any of the existing groups.
Added added = null;
for (int i = 0; added == null && i < groups.size(); i++) {
Set<String> group = groups.get(i);
added = add(group, i, a, b);
if (added == null) {
added = add(group, i, b, a);
}
}
if (added != null) {
// Merge any now-joined groups.
for (int i = added.where + 1; i < groups.size(); i++) {
Set<String> group = groups.get(i);
if (group.contains(added.what)) {
// Join them.
groups.get(added.where).addAll(group);
groups.remove(group);
// There shouldn't be any more.
break;
}
}
} else {
// New group - May be better to use a TreeSet here for print order.
Set<String> group = new HashSet<>();
group.add(a);
group.add(b);
groups.add(group);
}
}
void printGroups(String title) {
System.out.println(title);
for (int i = 0; i < groups.size(); i++) {
System.out.println("Group " + (i + 1) + "=" + groups.get(i));
}
}
public void test() {
addPair("b", "a");
addPair("c", "b");
addPair("c", "a");
addPair("d", "e");
printGroups("Test-1");
addPair("d", "b");
printGroups("Test-2");
}
}
它打印:
Test-1
Group 1=[b, c, a]
Group 2=[d, e]
Test-2
Group 1=[d, e, b, c, a]