字符串与字符串的顺序组合

Sequential Combination of string from string

我很难过。我想知道字符串的顺序组合是否可用。例如我要匹配的字符串是

string somevar = "rat";

那么如果另一个字符串包含 "rat"、"at"、"ra" 或 "r"、"a"、"t" 它应该 return假的。

我只能考虑为我可以手动找到的每个序列设置条件。但我相信可能有一些技巧可以轻松找到它。我查看了 Implement a function that prints all possible combinations of the characters in a string,但它不符合我的要求。

很抱歉,如果这不是很清楚,但我想检查

 if(somevar == "rat" || somevar == "at" || somevar == "ra" || somevar == "r" || somevar == "a" || somevar == "t")
 {
      \do something
 }

您需要一种确定所有子串的方法

public static IEnumerable<string> GetAllSubStrings(string input, int length)
{
    for (var i = 0; i < input.Length - length + 1; i++)
    {
        yield return input.Substring(i, length);
    }
}

然后您可以创建一个包含所有组合的列表

string somevar = "rat";
List<string> subStrings = new List<string>();
for (int i = 0; i < somevar.Length; i++)
{
    subStrings.AddRange(GetAllSubStrings(somevar, i + 1));
}
// subStrings = {"rat", "at", "ra", "r", "a", "t"}

最后根据该列表检查您的其他字符串。

更新您的更新问题:

//check "ra" 
string testItem = "ra";
bool contains = subStrings.Any(x => testItem == x);

如果包含单个字符就足够了,则无需检查所有子字符串:

bool containsAnyChar = somevar.Intersect("rat").Any();

之所以可行,是因为字符串实现了 IEnumerable<char>(是字符的集合)。

string somevar = "rat";
string anotherString = "rat is there";
bool result = somevar.ToCharArray().Any(ch => anotherString.Contains(ch));