String s1 = "69289106x07390x,692891060s8113,5420056134897";
String s2 = "6928910608113,692891060s8113,69289106x07390x";
對比上面s1和s2的字串,因為s1和s2是物件中的某個具體的值,所以想通過將s2的物件轉換為map,key為s2或s2轉換后的字串
如何最快的將這兩個字串中的內容重新排序為相同的字串
uj5u.com熱心網友回復:
你這個問題描述不清楚,重新排序未相同的字串是指把所有的字符平均分配給兩個字串,還是說兩個字串取共同的字符重新組成字串?這里給出前者的例子代碼(也就是字符平均分配)
public class Sample {
public static void main(String[] args) {
String s1 = "69289106x07390x,692891060s8113,5420056134897";
String s2 = "6928910608113,692891060s8113,69289106x07390x";
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
Arrays.parallelSort(c1); //兩個字串排序
Arrays.parallelSort(c2);
System.out.println(new String(c1)); //排序結果
System.out.println(new String(c2));
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
int i=0, j=0;
for (; i<c1.length && j<c2.length; ) { //找出共同字符
if (c1[i]==c2[j]) { //如果相同
sb1.append(c1[i++]); //則各取該字符
sb2.append(c2[j++]);
} else if (c1[i]>c2[j]) { //如果c1大
if (j+1<c2.length&&c2[j]==c2[j+1]) { //如果c2連續兩個相同
sb1.append(c2[j++]); //則把c2分配給c1
sb2.append(c2[j++]);
} else { //否則舍棄c2字符(因為不成雙,不能平均分配)
j++;
}
} else { //如果c2大
if (i+1<c1.length && c1[i]==c1[i+1]) { //如果c1連續兩個相同
sb1.append(c1[i++]); //則把c1分配給c2
sb2.append(c1[i++]);
} else { //否則舍棄c1字符(因為不成雙,不能平均分配)
i++;
}
}
}
for(; i<c1.length;) { //繼續處理c1未完成分配的字符
if (i+1<c1.length && c1[i]==c1[i+1]) {
sb1.append(c1[i++]);
sb2.append(c1[i++]);
} else {
i++;
}
}
for (; j<c2.length; ) { //繼續處理c2未完成分配的字符
if (j+1<c2.length && c2[j]==c1[j+1]) {
sb1.append(c2[j++]);
sb2.append(c2[j++]);
} else {
j++;
}
}
System.out.println(sb1.toString()); //s1最終重組結果
System.out.println(sb2.toString()); //s2最終重組結果(和s1相同)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/203775.html
標籤:Java EE
