使用LINQ在两个字符串中进行Char序列比较

时间:2014-08-21 17:53:41

标签: c# string linq

我有两个字符串说: - string s1 =“TEST”; string s2 =“ASDTFGHEJKLSIOPT”;

现在,如果我们仔细查看字符串s2中字符串s1的字符序列,我们发现s2包含s1中相同序列但索引不同的所有字符。

我想要一个解决方案(尽可能使用LINQ或使用最低复杂度数组解决方案),如果字符串包含来自同一序列中另一个字符串的所有字符而不管其索引如何,则返回true,否则它应返回false。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

string s1 = "TEST"; string s2 = "ASDTFGHEJKLSIOPT";
//Will return all the matching characters without loosing their sequence
var matchingString = new string(s2.Where(r => s1.Contains(r)).ToArray());
if (matchingString.Contains(s1))
{
    //found
}
else
{
    //not found
}

这将确保匹配的字符串是否包含相同序列中的s1,而与索引无关。

答案 1 :(得分:0)

Linq Aggregate方法可用于此目的:

public static class TextHelper
{
    public static bool ContainsInterspersed(this string outer, string inner)
    {
        if (outer == null || inner == null)
            throw new ArgumentNullException();
        return ((IEnumerable<char>)inner).Aggregate(0, (nextIndex, ch) =>
            {
                nextIndex = (nextIndex < 0 ? nextIndex : outer.IndexOf(ch, nextIndex));
                if (nextIndex >= 0)
                    nextIndex++;
                return nextIndex;
            }) >= 0;
    }
}

这是两个字符串长度的线性。此方法不会创建任何数组或子字符串。