如何获得给定字符串的所有可能字符对?

时间:2016-10-08 03:34:37

标签: java string

我有一个字符串“oracle”。我想获得app可能的字符对。我尝试过这样做,并且能够在o(n*n)中完成。我正在寻找更优化的解决方案。我们可以在不到o(n*n)的情况下解决它吗?

Input : oracle
Output : "or" "oa", "oc", "ol", "oe" , "ra", "rc", "rl", "re" , "ac", "al", "ae", "cl", "ce", "le"

2 个答案:

答案 0 :(得分:0)

不,这是不可能的,因为输出大小基于O(n*n)。根据具体要求,最高可达n*(n-1)n*(n-1)/2(如果我们需要保留原始单词的顺序)。

答案 1 :(得分:-1)

    String string = "oracle";
    HashMap occurs = new HashMap();

    for(int i=0; i<string.length(); i++)
        occurs.put(""+string.charAt(i), new Boolean(true));

    for(char a='a'; a < 'z'; a++)
        if(occurs.get(""+a)!=null)
            for(char b=(char) (a+1); b<'z'; b++)
                if(occurs.get(""+b)!=null)
                    System.out.print(a+""+b+" ");

可以在线性时间内完成。
首先,你需要一个字母表中所有字符的布尔数组(!用于常量查找时间)并迭代字符串以检查包含哪些字符。 (线性)
其次,你需要迭代所有可能的字符对,并检查两个字符是否包含在内,如果相应的布尔值是 true (常数)

如果需要,我可以提供一些代码


电贺!