2012-01-22 7 views
0

私は、ある文字が1回だけ使用されている別の基本文字列から、与えられた文字列が何回見つけられる(形成される)のか探したいという問題を設計しています。C#で別の文字列の文字を使用して文字列を取得できるかどうかを確認する方法は?

は私が

string str = "COMPUTER"; 

string basestr = "**TER** WITH **R** LABEL **COMPUTER** BELONGS TO **COMPUT** QUICK CUTE **COM** FOX JUM **P** S **U** R **T** H **E** LAZY DOG"; 

を持っていると仮定だから私のプログラムは、この刺されbasestrのために3を返すことにしたいです。 ここでは、1台のコンピュータが明瞭に利用可能であり、別のコンピュータが2ワードであり、最後は単語および文字である。

私はこのプログラムを手伝ってください。 どうすればいいですか? ありがとう

+0

したがって、順序が重要ではない文字セットを比較するのは正しいですか、正しいですか? – alexm

+0

@alexm:orderは重要ではありませんが、注目点が残るまで、0からnまで1つずつ繰り返していく必要があります。 – ItsLockedOut

答えて

3

まず、短い文字列の文字カウントを構成します。その後、長い文字列の文字カウントを構築します。短い文字列の文字数ごとに、長い文字列の数を短い文字列の数で除算します。整数部分のみを保持します。最小の整数を選ぶ - それはあなたの問題に対する答えです。

int[] Count(string s) { 
    int[] res = new int[256]; 
    foreach (var c in s) { 
     res[c]++; 
    } 
    return res; 
} 
int ShortInLong(string ss, string ls) { 
    var sc = Count(ss); 
    var lc = Count(ls); 
    int res = int.MaxValue; 
    foreach (var c in ss) { 
     int d = lc[c]/sc[c]; // sc[c] is never 0 because of the way we constructed it 
     res = Math.Min(res, d); 
    } 
    return res; 
} 
+0

何かを返す場合がありますか? – mowwwalker

+0

@Walkerneoありがとう! * result *に 'res'という便利な名前をつけて返すことが1つだけあります。 – dasblinkenlight

+0

strがbasestringに存在しないことがあります。じゃあ何 ?あなたが完全に創設された単語を削除して、それを再び数えないようにすることができます – ItsLockedOut

関連する問題