黑马程序员技术交流社区
标题:
打印一个字符串的所有排列形式
[打印本页]
作者:
爱学习的小明
时间:
2014-11-11 19:35
标题:
打印一个字符串的所有排列形式
怎么用代码实现任意一个字符串的所有排列形式?如将“abcd”所有的字符串的排列打印出来,
"a" ,“b”,“c”
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"
我自己写的代码是:
class Test
{
public static void main(String[] args)
{
String [] arr ={"a","b","c"};
for (int x=0;x<3 ;x++ )
{
for (int y = 0;y<3 ;y++ )
{
for (int z = 0;z<3 ;z++ )
{
if(x==y && x==z)
System.out.println(arr[z]);
if(x!=y && y==z)
System.out.println(arr[x]+arr[y]);
if(x!=y && y!=z && x!=z)
System.out.println(arr[x]+arr[y]+arr[z]);
}
}
}
}
}
但这只是实现了abc三个字母的排序,如果是4个字母,那再加一个循环,加多几次判断语句,觉的这种思想
不理想,请教各位同学,有没有更好的思路实现任意长度字符串的排序。
作者:
hanxing
时间:
2014-11-12 23:15
给你两个方法,一个是获取所有子字符串,如果需要去重可以把list改成set,这两个方法都是通用的,只不过是在其它文件中截取出来的
//求一个字符串的所有字字符串
public static List<String> getSubStrList(String str) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < str.length(); i++) {
for (int j = i + 1; j < (str.length() + 1); j++) {
String subStr = str.substring(i, j);
list.add(subStr);
}
}
System.out.println("List"+list);
return list;
}
复制代码
下面这个是对字符串进行排序的,当然,你也可以用另一种方法Comparator对象实现定制排序,还有一个叫Collections工具类中有个sort()方法我没试过,你可以试试.
//利用选择原理对list中的元素进行排序
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i; j < list.size(); j++) {
String str1 = list.get(i);
String str2 = list.get(j);
String mark = null;
//分别把字符串变为小写字符,并比较大小,如果前面的小于后面的字符串,就调换list中对应的value
if ((str1.toLowerCase()).compareTo(str2.toLowerCase()) < 0) {
mark = str1;//用于存放 list中index为i的value
list.set(i, str2);//把大的字符串的value覆盖index为i的value
list.set(j, mark);//把index为i的value覆盖index为j的value
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2