使用LINQ比较两个字符串中的字符序列
本文关键字:字符串 字符 两个 比较 LINQ 使用 | 更新日期: 2023-09-27 18:19:04
我有两个字符串:-字符串s1 = "TEST";string s2 = "ASDTFGHEJKLSIOPT";
现在,如果我们仔细观察字符串s1在字符串s2中的字符序列,我们发现s2包含来自s1的所有字符,它们在相同的序列中,但索引不同。
我想要一个解决方案(如果可能的话使用LINQ或使用最小复杂度的数组解决方案),如果字符串包含来自另一个字符串的所有字符在相同序列中,无论其索引如何,则返回true,否则它应该返回false。
你可以这样做:
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
,而不考虑索引。
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;
}
}
这两个字符串的长度是线性的。此方法不创建任何数组或子字符串。