67,512
社区成员
发帖
与我相关
我的任务
分享
public boolean compare(String s1, String s2) {
if (s1.length() != s2.length())
return false;
else {
char[] c1 = s1.toCharArray();
for (char c : c1) {
if(s2.indexOf(c)<0)return false;
}
return true;
}
}
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public final class Test {
public static void main(String[] args){
grouping();
}
private static void grouping() {
String[] string = { "fghj", "ghjf", "fhgj", "a", "ab", "ba", "aec",
"cea", "cae", "zz", "aaa", "zz", "aaa", "asd", "dsa", "ab",
"eac", "s", "a", "fd", "fdfg", "dgs", "dg", "r", "qwer", "df",
"fdgf", "re", "fd", "df", "a", "ba", "aec", "cae" };
// 先将数组通过长度排序,方便后面的比较
Arrays.sort(string, new Comparator<String>() {
public int compare(String str1, String str2) {
return str1.length() - str2.length();
}
});
// 将string转换成char[]用list封装
List<char[]> list = new ArrayList<char[]>();
for (String str : string) {
list.add(str.toCharArray());
}
// 创建容器存储结果
List<List<String>> groupList = new ArrayList<List<String>>();
List<String> str = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
str = new ArrayList<String>();
str.add(charArray2string(list.get(i)));
for (int j = i + 1; j < list.size(); j++) {
// 注意使用clone()方法创建副本做排序并比较以避免修改原始数据
char[] c1 = list.get(i).clone();
char[] c2 = list.get(j).clone();
// 因做了长度排序,故长度不同时可结束循环
if (c1.length != c2.length) break;
Arrays.sort(c1);
Arrays.sort(c2);
if (Arrays.equals(c1, c2)) {
str.add(charArray2string(list.get(j)));
// 读取同组元素后删除该元素并使指针后退一位
list.remove(j);
j--;
}
}
groupList.add(str);
}
System.out.println(groupList);
}
// char[]转换为string字符串
private static String charArray2string(char[] cs) {
StringBuilder builder = new StringBuilder();
for (char c : cs) {
builder.append(c);
}
return builder.toString();
}
}
package cn.geniusman.main;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public final class Classify {
private static final String[] STR_ARRAYS = new String[] { "fghj", "ghjf",
"fhgj", "a", "ab", "ba", "aec", "cea", "cae", "zz", "aaa", "zz",
"aaa", "asd", "dsa" };
private static Map<Integer, List<Extend>> classifyMap = new TreeMap<Integer, List<Extend>>();
public static void classify() throws UnsupportedEncodingException {
for (String item : STR_ARRAYS) {
Extend extend = new Extend(item);
int key = extend.getCompareCode();
if (!classifyMap.containsKey(key)) {
classifyMap.put(key, new ArrayList<Extend>());
}
classifyMap.get(key).add(extend);
}
}
public static void print() {
Collection<List<Extend>> values = classifyMap.values();
for (List<Extend> value : values) {
for (Extend extend : value) {
System.out.print(extend.getItem() + " ");
}
System.out.println();
}
}
static class Extend {
private String item;
private byte[] bytes;
private int compareCode;
public Extend(String item) {
this.item = item;
try {
this.bytes = item.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
}
for (byte b : bytes) {
this.compareCode += Integer.parseInt(String.valueOf(b));
}
}
public int getCompareCode() {
return this.compareCode;
}
public String getItem() {
return this.item;
}
}
/**
* @param args
* @throws UnsupportedEncodingException
*/
public static void main(String[] args) throws UnsupportedEncodingException {
Classify.classify();
Classify.print();
}
}
test