Friday, April 17, 2020

Hoán vị của Chuỗi trong java

Đề bài: Tìm tất cả các hoán vị có thể có của chuỗi đã cho
Amazon và các công ty tương đương đã hỏi câu hỏi phỏng vấn mã hóa chuỗi trong java cốt lõi rất phổ biến viết mã cho Anagram Solver (Các từ bị xáo trộn để tìm từ có nghĩa trong Từ điển) Thực tế là câu hỏi trên không thể được giải mà không tìm được hoán vị của chuỗi đã cho.
Hoán vị của Chuỗi trong java

Vì câu hỏi trên bao gồm hai câu trả lời trong một, rằng tại sao nó trở nên phổ biến trong các cuộc phỏng vấn java cốt lõi kỹ thuật của các công ty có uy tín.

Hoán vị của chuỗi là gì?

Hoán vị là tất cả các kết hợp có thể có của các chuỗi có thể của bất kỳ từ nào. Ví dụ
nếu chuỗi là "abs" thì tất cả các hoán vị có thể có của chuỗi sẽ là:
"sba"
"sab"
"bsa"
"bas"
"asb"
và cuối cùng từ gốc của chúng tôi : "abs"
Trong toán học ,
bạn có thể tính toán có bao nhiêu hoán vị của từ có thể, bằng cách sử dụng công thức
nPr = n! / (n-r)!
như trong ví dụ của chúng tôi: "abs"
Ở đây có ba ký tự trong từ gốc nên n = 3 và
chúng ta cần sử dụng cả ba ký tự vì vậy, ở đây r = 3
nPr = 3! / (3-3)!
       = 3! / 0!
       = 6
và chúng ta có thể thấy ở trên chỉ có sáu hoán vị được hiển thị cho chuỗi.
public class Permutation {
    public static void main (String args[])
    {
        System.out.println("Please enter the string whose permutations we need to show ");
        Scanner in = new Scanner(System.in);
        String original=in.nextLine();
        System.out.println("");
        System.out.println("");
        System.out.println("");
        System.out.println("Results are :");
        System.out.println("");
        System.out.println("");
        permute(original);
    }
    public static   void permute( String input)
    {
        int inputLength = input.length();
        boolean[ ] used = new boolean[ inputLength ];
        StringBuffer outputString = new StringBuffer();
        char[ ] in = input.toCharArray( );
        doPermute ( in, outputString, used, inputLength, 0 );
     
    }
    public static    void doPermute ( char[ ] in, StringBuffer outputString,
    boolean[ ] used, int inputLength, int level)
    {
        if( level == inputLength) {
            System.out.println ( outputString.toString());
            return;
        }
     
        for( int i = 0; i < inputLength; ++i )
        {
         
            if( used[i] ) continue;
         
            outputString.append( in[i] );
            used[i] = true;
            doPermute( in,   outputString, used, inputLength, level + 1 );
            used[i] = false;
            outputString.setLength(   outputString.length() - 1 );
        }
    }
 
}

No comments:

Post a Comment