ファーウェイ インタビュー 手切れリアルな質問【文字列の配置】

文字列を入力し、文字列内の文字のすべての順列を出力します。

この文字列配列は任意の順序で返すことができますが、要素が重複することはありません。

        典型的な完全順列問題では、文字列順列の特性に従って、すべての順列について深さ優先探索を検討します。すなわち、文字交換により、まず最初の文字を固定し(n ケース)、次に 2 文字目を固定し(n-1 ケース)、…、最後に n 番目の文字を固定する(1 ケース)。   リーキ

     

        文字列に繰り返し文字がある場合は、順列方式にも繰り返し順列方式があります。繰り返し方式を排除するには、特定の文字を固定するときに、「各文字がこの位置に 1 回だけ固定される」ようにする必要があります。DFS の観点から、この操作は「プルーニング」と呼ばれます。

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
import java.util.stream.Stream;
 
class Main {
    public static List<String> res = new LinkedList<>();
    public static char[] c;
	public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        String input_str = in.nextLine();
        
        System.out.println(Arrays.toString(permutation(input_str)));
        
    }

    public static String[] permutation(String s) {
        c = s.toCharArray();
        dfs(0);
        return res.toArray(new String[res.size()]);
    }
    public static void dfs(int x) {
        if(x == c.length - 1) {
            res.add(String.valueOf(c));      // 添加排列方案
            return;
        }
        HashSet<Character> set = new HashSet<>();
        for(int i = x; i < c.length; i++) {
            if(set.contains(c[i])) continue; // 重复,因此剪枝
            set.add(c[i]);
            swap(i, x);                      // 交换,将 c[i] 固定在第 x 位
            dfs(x + 1);                      // 开启固定第 x + 1 位字符
            swap(i, x);                      // 恢复交换
        }
    }
    public static void swap(int a, int b) {
        char tmp = c[a];
        c[a] = c[b];
        c[b] = tmp;
    }
 
}

  Huawei OD 2023/2022 最新試験問題と解説、合格率100%。

Java: https://renjie.blog.csdn.net/article/details/127947829

パイソン: https://renjie.blog.csdn.net/article/details/127946125

C++: https://renjie.blog.csdn.net/article/details/126965954

JS: https://renjie.blog.csdn.net/article/details/128974467

C: https://renjie.blog.csdn.net/article/details/129190260

  Huawei OD 2023/2022 最新試験問題と解説、合格率100%。

Java: https://renjie.blog.csdn.net/article/details/127947829

パイソン: https://renjie.blog.csdn.net/article/details/127946125

C++: https://renjie.blog.csdn.net/article/details/126965954

JS: https://renjie.blog.csdn.net/article/details/128974467

C: https://renjie.blog.csdn.net/article/details/129190260

  Huawei OD 2023/2022 最新試験問題と解説、合格率100%。

Java: https://renjie.blog.csdn.net/article/details/127947829

パイソン: https://renjie.blog.csdn.net/article/details/127946125

C++: https://renjie.blog.csdn.net/article/details/126965954

JS: https://renjie.blog.csdn.net/article/details/128974467

C: https://renjie.blog.csdn.net/article/details/129190260

おすすめ

転載: blog.csdn.net/misayaaaaa/article/details/130426866