CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Mục lục

Trang chủBlogCách tìm tất cả hoán vị c...
Java

Cách tìm tất cả hoán vị của chuỗi Java [Có code mẫu]

2 phút đọc30/07/2025
CyStack Author
Chris Pham

Technical Writer

0 lượt xem
Reading Time: 2 minutes

Trong hướng dẫn này, chúng ta sẽ học cách tìm tất cả hoán vị của chuỗi Java. Đây là một câu hỏi “mẹo” thường xuất hiện trong các buổi phỏng vấn Java.

hoán vị của chuỗi Java

Thuật toán tạo hoán vị cho String trong Java

Chúng ta sẽ bắt đầu bằng cách lấy ký tự đầu tiên của chuỗi và hoán vị phần còn lại.

Ví dụ, nếu chuỗi là "ABC" thì:

  • Ký tự đầu tiên là A
  • Các hoán vị của phần còn lại ("BC") là "BC""CB"

Sau đó, ta chèn ký tự đầu tiên vào tất cả các vị trí có thể trong từng hoán vị con:

  • "BC""ABC", "BAC", "BCA"
  • "CB""ACB", "CAB", "CBA"

Chúng ta có thể viết một hàm đệ quy để trả về các hoán vị của phần chuỗi còn lại, sau đó viết thêm một hàm khác để chèn ký tự đầu tiên vào tất cả các vị trí có thể trong các hoán vị đó, nhằm tạo ra danh sách đầy đủ các hoán vị của chuỗi ban đầu.

Chương trình Java để in ra tất cả hoán vị của String

package com.journaldev.java.string;

import java.util.HashSet;
import java.util.Set;

/**
 * Java Program to find all permutations of a String
 * @author Pankaj
 *
 */
public class StringFindAllPermutations {
    public static Set permutationFinder(String str) {
        Set perm = new HashSet();
        //Handling error scenarios
        if (str == null) {
            return null;
        } else if (str.length() == 0) {
            perm.add("");
            return perm;
        }
        char initial = str.charAt(0); // first character
        String rem = str.substring(1); // Full string without first character
        Set words = permutationFinder(rem);
        for (String strNew : words) {
            for (int i = 0;i<=strNew.length();i++){
                perm.add(charInsert(strNew, initial, i));
            }
        }
        return perm;
    }

    public static String charInsert(String str, char c, int j) {
        String begin = str.substring(0, j);
        String end = str.substring(j);
        return begin + c + end;
    }

    public static void main(String[] args) {
        String s = "AAC";
        String s1 = "ABC";
        String s2 = "ABCD";
        System.out.println("\\nPermutations for " + s + " are: \\n" + permutationFinder(s));
        System.out.println("\\nPermutations for " + s1 + " are: \\n" + permutationFinder(s1));
        System.out.println("\\nPermutations for " + s2 + " are: \\n" + permutationFinder(s2));
    }
}

Tôi đã sử dụng Set để lưu trữ các hoán vị của chuỗi, nhằm tự động loại bỏ các giá trị trùng lặp.

Kết quả đầu ra

Permutations for AAC are: 
[AAC, ACA, CAA]

Permutations for ABC are: 
[ACB, ABC, BCA, CBA, CAB, BAC]

Permutations for ABCD are: 
[DABC, CADB, BCAD, DBAC, BACD, ABCD, ABDC, DCBA, ADBC, ADCB, CBDA, CBAD, DACB, ACBD, CDBA, CDAB, DCAB, ACDB, DBCA, BDAC, CABD, BADC, BCDA, BDCA]

Vậy là chúng ta đã hoàn thành việc tìm tất cả các hoán vị của String trong Java.

Về tác giả

Chris Pham
Chris PhamTechnical Writer

I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information. @#@ Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.

Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn

Thảo luận (0)

Đăng nhập để thảo luận

Bài viết liên quan