0

我需要一种方法来检查一个字符串是否包含一个或多个与另一个相似的字符。我不想找到所有包含字母“D”的字符串。例如,如果我有一个字符串“Christopher”并且想查看“Christopher”中是否包含“Chris”,我希望它返回。但是,如果我想查看“Candy”是否在字符串“Christopher”中,我不会因为它有一个共同的“C”而希望它返回。

我已经尝试过 .Contains() 方法,但无法为 2 个或更多类似字符提供该规则,我曾考虑使用正则表达式,但这可能有点过头了。相似的字母必须彼此相邻。

谢谢 :)

4

2 回答 2

2

这会查找每个 2-character-grams1并在s2.

string s1 = "Chrx";
string s2 = "Christopher";
IsMatchOn2Characters(s1, s2);

static bool IsMatchOn2Characters(string a, string b)
{
    string s1 = a.ToLowerInvariant();
    string s2 = b.ToLowerInvariant();

    for (int i = 0; i < s1.Length - 1; i++)
    {
       if (s2.IndexOf(s1.Substring(i,2)) >= 0)
          return true; // match
    }

    return false; // no match
}
于 2012-05-31T19:51:32.083 回答
1

这看起来很像最长的公共子串问题。这可以使用 O(m*n) 中的 DP 轻松解决。

如果您不担心性能并且真的不想实现这一点,您也可以使用将 s1 的每个子字符串搜索到 s2 的蛮力解决方案。

于 2012-05-31T20:03:15.907 回答