c# - 返回字符串之间第一个差异的索引

标签 c#

<分区>

我想知道是否有一种奇特的方法可以找到字符串 a 中与字符串 b 相同位置的字符不匹配的第一个字符的索引,除了使用暴力之外。

这是暴力尝试:

bool OnlyDiffersByCarotsAndSpaces(string a, string b)
{
    if( a.Count() != b.Count() )
    {
        return false;
    }

    for(int index = 0; index < a.Count(); ++index)
    {
        if( a[index] != b[index] )
        {
            string validCharacters = " ^";

            if( !validCharacters.Contains(a[index]) ||
                !validCharacters.Contains(b[index]) )
            {
                return false;
            }
        }
    }

    return true;
}

最佳答案

我认为您可以使用 string.Split 的组合将字符串分解为数组,拆分“有效字符”,然后返回 IEnumerable.SequenceEqual< 的结果,如果两个 IEnumerables 包含相同顺序的相同元素,则返回 true:

private static bool OnlyDiffersByCarotsAndSpaces(string a, string b)
{
    // A few "exit quick" checks...
    if (a == null) return b == null;
    if (b == null) return false;

    var validChars = new[] {' ', '^'};
    var first = a.Split(validChars);
    var second = b.Split(validChars);

    return first.SequenceEqual(second);
}

关于c# - 返回字符串之间第一个差异的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061121/

相关文章:

c# - 如何将 HttpClientHandler 添加到 url?

c# - JavaScript 中的重置函数

c# - JSON WebMethods 的 SoapExtension 等效项是什么?

c# - C#计时器2同时执行的 Action

c# - 如何使用NAudio和ASIO直接读取输入缓冲区并进行回放?

c# - 负零 (-0) 等于 C# 中的零 (0)

c# - 如何检查我的 lambda 表达式是否为空?

c# - 如何获取嵌入资源的资源Uri?

c# - ILookup<TKey, TElement> 不应该在 TElement 中(声明)协变吗?

c# - 为什么 Linq 无法将表达式翻译/视为本地表达式并引发异常?