1. 程式人生 > >輸出全排列缺少的字符串

輸出全排列缺少的字符串

null private class imp nta 走了 0ms star n)

時間間限制:1000ms
題目描述:對K個不同字符的全排列組成的數組, 面試官從中隨機拿走了一個, 剩下的數組作為輸入, 請幫忙找出這個被拿走的字符串?
比如[“ABC”, “ACB”, “BAC”, “CAB”, “CBA”] 返回 “BCA”

輸入描述:第一行輸入整數n,表示給定n個字符串。(n == x!-1,2<=x<=10)
以下n行每行輸入一個字符串。

輸出描述:輸出全排列缺少的字符串。
示例1
輸入5
ABC
ACB
BAC
CAB
CBA
輸出BCA

package com.cslg.day01;

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;

public class main02 {
    public static LinkedList<String> list2 = new LinkedList<String>();
    public static void allPermutation(String str){
        if(str == null || str.length() == 0)
            return;
        //保存所有的全排列
        LinkedList<String> listStr = new LinkedList<String>();
        
        allPermutation(str.toCharArray(), listStr, 0);
        
        print(listStr);//打印全排列
    }
    
    
    private static void allPermutation(char[] c, LinkedList<String> listStr, int start){

        if(start == c.length-1)
            listStr.add(String.valueOf(c));//System.out.println(String.valueOf(c));
        else{
            for(int i = start; i <= c.length-1; i++)
            {
                //只有當沒有重疊的字符 才交換
                if(!isSwap(c, start, i))
                {
                    swap(c, i, start);//相當於: 固定第 i 個字符
                    allPermutation(c, listStr, start+1);//求出這種情形下的所有排列
                    swap(c, start, i);//復位
                }
            }
        }
    }
    
    private static void swap(char[] c, int i, int j){
        char tmp;
        tmp = c[i];
        c[i] = c[j];
        c[j] = tmp;
    }
    
    private static void print(LinkedList<String> listStr)
    {
        Collections.sort(listStr);//使字符串按照‘字典順序‘輸出
        for(int i=0;i<listStr.size();i++){
        	if(!list2.contains(listStr.get(i))){
            	System.out.println(listStr.get(i));
            }
        }
    }
    
    //[start,end) 中是否有與 c[end] 相同的字符
    private static boolean isSwap(char[] c, int start, int end)
    {
        for(int i = start; i < end; i++)
        {
            if(c[i] == c[end])
                return true;
        }
        return false;
    }
    
    public static void main(String[] args) {
    	 Scanner in = new Scanner(System.in);
         int num  = in.nextInt();
         String[] str = new String[num]; 
         for(int i=0;i<num;i++){
         	str[i] = in.next();
         	list2.add(str[i]);
         }
        allPermutation(str[0]);
    }
}

  

輸出全排列缺少的字符串