【面试题25】字符串的排列

来源:互联网 发布:2016网络诈骗事件 编辑:程序博客网 时间:2024/06/03 19:51

题目:输入一个字符串,打印出该字符串中字符的所有排列。

例如输入字符串abc,则打印由字符a,b,c所能排列出来的所有字符串:abc,abc,bac,bca,cab,cba

我们求整个字符串的排列,可以看成两步:首先求出所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。下图就是分别把第一个字符a和后面的b,c交换的情景。第二步固定第一个字符,求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换……

注:(a)把字符串分为两部分,一部分是字符串的第一个字符,另一部分是第一个字符以后的所有字符。接下来我们求阴影部分的字符串的排列。(b)拿第一个字符和它后面的字符逐个交换。



  1. public class E28StringPermutation {  
  2.       
  3.     public void swap(char[] arr,int idx1,int idx2){  
  4.         char temp = arr[idx1];  
  5.         arr[idx1] = arr[idx2];  
  6.         arr[idx2] = temp;  
  7.     }  
  8.     public void permutation(char[] arr,int index,int size){  
  9.         if(index == size){  
  10.             for(int i = 0;i<arr.length;i++){  
  11.                 System.out.print(arr[i]+ " ");  
  12.             }  
  13.             System.out.println();  
  14.         }  
  15.         else{  
  16.             for(int i = index;i<size;i++){  
  17.                 if(i!=index && arr[i] == arr[index])  
  18.                     continue;  
  19.                 swap(arr,i,index);  
  20.                 permutation(arr,index+1,size);  
  21.                 swap(arr,i,index);  
  22.             }  
  23.         }  
  24.     }  
  25.     public static void main(String[] args){  
  26.         String str="abcd";  
  27.         char[] chs = str.toCharArray();  
  28.         E28StringPermutation test = new E28StringPermutation();  
  29.         test.permutation(chs,0,4);  
  30.     }  


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 通知拘留跑了怎么办 假烟倒卖会怎么办 卖了40万假烟怎么办 刑事拘留15天了怎么办 治安传唤人不到怎么办 治安处罚有劣迹怎么办 学生怀孕了该怎么办 有病不能拘留那怎么办 拘留所不交伙食费怎么办 治安拘留不执行怎么办 释放证明书丢了怎么办 银行提前收贷款怎么办 存货周转天数高怎么办 欠款人没有财产怎么办 起诉后对方没钱怎么办 法院起诉人不到怎么办 治安拘留跑了怎么办 看守所里生病了怎么办 二审上诉被驳回怎么办 醉酒驾车取保候审以后怎么办 小案子证据不足怎么办 撞车不严重逃逸怎么办 被执行人没有财产执行怎么办 挖到人头了怎么办 取保保证金不退怎么办 被诬陷经济诈骗怎么办 醉驾刑事拘留后怎么办 被别人举报赌博怎么办 涉黄刑事拘留怎么办取保候审 换了车牌保险怎么办 车辆转让后保险怎么办 立案后警察不管怎么办 打架后对方讹人怎么办 工商被恶意举报怎么办 店铺被工商举报怎么办 被买单侠恐吓怎么办? 团伙作案刑事拘留怎么办取保 欢乐麻将老输怎么办 回不了家怎么办身份证 没注意闯红灯了怎么办 摩托车被套牌了怎么办?