zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 08.08. 有重复字符串的排列组合

    题目:

    有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

    示例1:

    输入:S = "qqe"
    输出:["eqq","qeq","qqe"]
    示例2:

    输入:S = "ab"
    输出:["ab", "ba"]
    提示:

    字符都是英文字母。
    字符串长度在[1, 9]之间。

    分析:

    这道题所给的字符串有重复的字符,一个比较简单的做法就是结果加个set去重。不过在这里说一下交换方法。

    通过交换方法可以产生排列,不过由于有重复字符,有两种情况我们不能进行交换。如aba,和baa,其中的两个a不需要进行交换。

    程序:

    class Solution {
        public String[] permutation(String S) {
            char[] chArray = S.toCharArray();
            Arrays.sort(chArray);
            List<String> res = new ArrayList<>();
            permutation(res, 0, chArray);
            return res.toArray(new String[0]);
        }
        private void permutation(List<String> res, int index, char[] chArray){
            if(index == chArray.length-1){
                res.add(new String(chArray));
                return;
            }
            for(int i = index; i < chArray.length; ++i){
                if(i > index && (chArray[i] == chArray[index] || chArray[i] == chArray[i-1]))
                    continue;
                swap(index , i, chArray);
                permutation(res, index + 1, chArray);
                swap(index, i, chArray);
            }
        }
        private void swap(int i, int j, char[] chArray){
            char ch = chArray[i];
            chArray[i] = chArray[j];
            chArray[j] = ch;
        }
    }
  • 相关阅读:
    ajax的一些知识
    前端性能优化汇总
    jquery实现一些小动画二
    python简单日志处理
    逆波兰式---C实现
    java常见异常
    Hive与HBase集成及常见问题解决
    SQL for HBase
    Demystifying the Skip Scan in Phoenix
    Difference between DDL, DML and DCL commands
  • 原文地址:https://www.cnblogs.com/silentteller/p/12461893.html
Copyright © 2011-2022 走看看