我有一个字符串“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"
答案 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 。 (常数)
如果需要,我可以提供一些代码
电贺!