public static List<String> getBrothers(String str){ List<String> brothers = null ; if(str != null && str.length()>1) brothers = new ArrayList<String>() ; for (int i = 0; i < str.length() ; i++) { for (int j = i+1; j < str.length() ; j++) { brothers.add(str.substring(0, i)+ str.substring(j, j+1)+ str.substring(i+1,j)+ str.substring(i, i+1)+str.substring(j+1)) ; // System.out.println(str.substring(0, i)+":"+ str.substring(j, j+1)+":"+ str.substring(i+1,j)+":"+ str.substring(i, i+1)+":"+str.substring(j+1));
} } return brothers ; }
这不是排列组合吗? for example public class Test { public static void main(String[] args) { char[] c = "amry".toCharArray(); parade(c, c.length, new StringBuilder()); } public static void parade(char[] c, int n, StringBuilder buf) { if (c==null || c.length==0 || n<1) return; if (n > c.length) n = c.length; if (n==1) { for (int i=0; i<c.length; i++) { System.out.printf("%s%s\n", buf, c[i]); } return; } char[] sub = new char[c.length-1]; for (int i=0; i<c.length; i++) { for (int j=0, k=0; j<c.length; j++) { if (i!=j) sub[k++] = c[j]; } buf.append(c[i]); parade(sub, n-1, buf); buf.delete(buf.length()-1, buf.length()); } } }
package com.demo;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Demo {
List<String> brothers = null ;
if(str != null && str.length()>1)
brothers = new ArrayList<String>() ;
for (int i = 0; i < str.length() ; i++) {
for (int j = i+1; j < str.length() ; j++) {
brothers.add(str.substring(0, i)+ str.substring(j, j+1)+ str.substring(i+1,j)+ str.substring(i, i+1)+str.substring(j+1)) ;
// System.out.println(str.substring(0, i)+":"+ str.substring(j, j+1)+":"+ str.substring(i+1,j)+":"+ str.substring(i, i+1)+":"+str.substring(j+1));
}
}
return brothers ;
}
for example
public class Test {
public static void main(String[] args) {
char[] c = "amry".toCharArray();
parade(c, c.length, new StringBuilder());
} public static void parade(char[] c, int n, StringBuilder buf) {
if (c==null || c.length==0 || n<1) return;
if (n > c.length) n = c.length; if (n==1) {
for (int i=0; i<c.length; i++) {
System.out.printf("%s%s\n", buf, c[i]);
}
return;
} char[] sub = new char[c.length-1];
for (int i=0; i<c.length; i++) {
for (int j=0, k=0; j<c.length; j++) {
if (i!=j) sub[k++] = c[j];
} buf.append(c[i]);
parade(sub, n-1, buf);
buf.delete(buf.length()-1, buf.length());
}
}
}
import java.io.IOException;
import java.io.InputStreamReader;public class Demo {
/**
* 我的思路是先将输入的字符串变成字符数组,然后将第一个字符和第二个字符交换,
* 将所得字符数组存进buffer中,重置数组,再将第一个字符与第三个字符交换
* 依次类推,这样就可以保证计算次数最小。
* 输入字符为abcd,以下为输出结果
* Result::bacd cbad dbca acbd adcb abdc
* 仅供参考,欢迎讨论
*/
public static void main(String[] args) throws IOException{
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
String str = is.readLine();
StringBuffer buffer = new StringBuffer("Result::");
char[] ch = str.toCharArray();
int count = 0;
for(int i = 0; i < ch.length - 1; i++){
for(int j = i + 1; j < ch.length; j++){
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
buffer.append(ch).append(" ");
ch = str.toCharArray();
count++;
}
}
System.out.println(buffer);
}
}
先构建字符串model=str+str+str
然后从model的第一个字符开始逐渐取N个字符,直到2N个字符为止,当然为了防止重复你可以放到HashSet集合类中
String s="marry";
char[] s1=s.toCharArray();
int temp=0;
for(int i=0;i<=s1.length;i++)
{
for(int k=0;k<=s1.length;k++)
{
for(int l=0;l<=s1.length;l++)
{
for(int m=0;m<=s1.length;m++)
{
for(int n=0;n<=s1.length;n++)
{
if(i+k+m+l+n==0+1+2+3+4)
{if(i==k||i==m||i==l||i==n||k==m||k==l||k==n||m==l||m==n||l==n)
{}
else { System.out.println(s1[i]+""+ s1[k]+""+ s1[l]+""+s1[m]+""+s1[n]);
temp++;
}
}}
}
}
}
}
System.out.println("一共的算法数是::"+temp);
}
public static void main(String[] args) {
Arrys();
}}
marry
maryr
marry
maryr
mayrr
mayrr
mrary
mrayr
mrray
mrrya
mryar
mryra
mrary
mrayr
mrray
mrrya
mryar
mryra
myarr
myarr
myrar
myrra
myrar
myrra
amrry
amryr
amrry
amryr
amyrr
amyrr
armry
armyr
arrmy
arrym
arymr
aryrm
armry
armyr
arrmy
arrym
arymr
aryrm
aymrr
aymrr
ayrmr
ayrrm
ayrmr
ayrrm
rmary
rmayr
rmray
rmrya
rmyar
rmyra
ramry
ramyr
rarmy
rarym
raymr
rayrm
rrmay
rrmya
rramy
rraym
rryma
rryam
rymar
rymra
ryamr
ryarm
ryrma
ryram
rmary
rmayr
rmray
rmrya
rmyar
rmyra
ramry
ramyr
rarmy
rarym
raymr
rayrm
rrmay
rrmya
rramy
rraym
rryma
rryam
rymar
rymra
ryamr
ryarm
ryrma
ryram
ymarr
ymarr
ymrar
ymrra
ymrar
ymrra
yamrr
yamrr
yarmr
yarrm
yarmr
yarrm
yrmar
yrmra
yramr
yrarm
yrrma
yrram
yrmar
yrmra
yramr
yrarm
yrrma
yrram
一共的算法数是::120
搞错了 算成marry的排序了.....不过原理可以参考一下的......