2016-10-08 9 views
0

私は1つの文字列 "oracle"を持っています。私は可能なアプリのペアを取得したい。私はそれをやってみたので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

いいえ、単に出力サイズがO(n*n)に基づいているため、できません。正確な要求に応じて、n*(n-1)またはn*(n-1)/2のいずれかになります(元の単語との順序を保つ必要がある場合)。

+0

私は1つの問題を解決していました。与えられた文字列に対して文字のペアを取得する必要があり、その文字列サイズは非常に大きいです。タイムアウトエラーが発生しました。ありがとうZbynek。 – Malav

-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+" "); 

線形時間で可能です。
まず、アルファベットのすべての文字のブール値配列(一定のルックアップ時間!)が必要であり、チェックする文字列を繰り返します(どの文字が含まれているか)。
第2に、可能なすべての文字ペアを繰り返し処理し、両方の文字が含まれていればそれをチェックする必要があります。対応するブール値がの場合はです。 (定数)


挨拶を必要に応じて、私は、いくつかのコードを提供することができます!

+0

ありがとう、シンタック、あなたが言ったようにここですべての可能な部分を繰り返す必要があります。それはO(n * n)を必要としないだろうか?私がここで間違っているなら、私を訂正してください。 – Malav

+0

いいえ、文字列の各文字を1回だけ反復処理します。ネストされたループなどはありません。あなたにはいくつかのjsコードが書かれています。 2番目のマート2次ランタイムでは必要ですが、2次ではなく、アルファベットの長さに戻ってください。これは再び一定です。 – Syntac

+0

JavascriptソリューションはJavaの質問にどのように適用できますか? –

関連する問題