2017-12-26 21 views
0

文字列から各単語を取り出し、別の文字列と同じかどうかを確認する必要があります。 2つの文字列の単語の順序は同じではありません。しかし、それは真の結果を返すべきです。例えば文字列の各単語を別のものと比較する方法 - uwp

: "StringtoCompareWith" と "InputString1" を比較するとき

  StringtoCompareWith="hi you should do this"; 
      InputString1="you hi should this do"; 
      InputString2="you hi "; 

それが真の結果を返す必要があります。また、 "InputString2"であればfalseを返します。どのようにしてこれを最も速く達成することができますか?

+0

だから、あなたはあなたの文字列比較し、あなたの入力文字列をトークン化し、それぞれが他のすべての単語を持っていることを確認したいですありますか? – john

+0

両方の文を単語の配列に分割し、最小の配列から各単語を反復処理します。時間複雑度O(n)。あなたはこれより少なくしたいですか? –

+0

@john実行時間が最低で – nsds

答えて

0

スペースで文字列を分割し、nullでない値のみを保持し、すべてが参照配列にあるかどうかをSequenceEqualで確認します。必要に応じて、リストから複製をクリアすることもできます。

+0

'StringtoCompareWith'に' InputString1'からのすべての単語といくつかの単語が含まれているとどうなりますか?それは動作しません。 –

+0

@OfirWinegarten、そうです。しかしopはこの点では不明です。 –

3

両方の文字列を分割し、Exceptを使用するだけでなく、両方に同じ数の単語が含まれていることを確認します。

var StringtoCompareWith = "hi you should do this"; 
var InputString1 = "you hi should this do"; 

var first = StringtoCompareWith.Split(); 
var second = InputString1.Split(); 

bool isEqual = first.Length == second.Length && !first.Except(second).Any(); 
+1

分割デリミタがありません。 – john

+1

ここでは必要ありません。ドキュメントをチェックしてください。separator引数がnullまたは文字を含まない場合、メソッドは空白文字を区切り文字として扱います。 –

+0

ああ、私はそれを知らなかった! :) – john

0

ここだから私は、あなたのニーズに従って変更することができたInputString1StringtoCompareWithを比較していますthis-

string StringtoCompareWith = "hi you should do this"; 
string InputString1 = "you hi should this do"; 
string InputString2 = "you hi"; 

var arr1 = StringtoCompareWith.Split(' '); 
var arr2 = InputString1.Split(' '); 

bool check = arr1.Count() == arr2.Count() ? ((arr1.Intersect(arr2).Count() == arr1.Count()) ? true : false) : false; 

を行う方法です。

1

同じ答えですが、foreachループを使用しています。ここでは、文章を単語に分割し、2つの配列のいずれかに各単語が含まれているかどうかを確認できます。ここで

はコードです:ここでは

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     string StringtoCompareWith="hi you should do this"; 
     string InputString1="you hi should this do"; 
     string InputString2="you hi "; 

     bool isEqual = CheckString(StringtoCompareWith, InputString1); 
     //bool isEqual = CheckString(StringtoCompareWith, InputString2); 

     Console.WriteLine(isEqual ? "Both are equals" : "Not equal"); 

    } 
    public static bool CheckString(string inp1, string inp2){ 
     string[] split1 = inp1.Split(' '); 
     string[] split2 = inp2.Split(' '); 

     //Worst case: when lenght are not same 
     if(split1.Length != split2.Length) 
      return false; 
     else{ 
      //Time complexity: O(n) 
      foreach(string s1 in split1){ 
       if(!inp1.Contains(s1)) 
        return false; 
      } 
     } 
    return true; 
    } 
} 

はリンクです:dotNetFiddler

関連する問題