C# =s2[i2])-参见“短路”:(值得怀疑的是,既然您在第一个条件下正确使用了字符串索引器,那么这将产生多大的差异——这将是一个非常大的数据集——但我始终强调,在if语句的开头放置最简单的条件,使用&&:可以产生很大的差异,特别是在多个循环中)啊哈,我的糟

C# =s2[i2])-参见“短路”:(值得怀疑的是,既然您在第一个条件下正确使用了字符串索引器,那么这将产生多大的差异——这将是一个非常大的数据集——但我始终强调,在if语句的开头放置最简单的条件,使用&&:可以产生很大的差异,特别是在多个循环中)啊哈,我的糟,c#,string,linq,string-comparison,stringcomparer,C#,String,Linq,String Comparison,Stringcomparer,=s2[i2])-参见“短路”:(值得怀疑的是,既然您在第一个条件下正确使用了字符串索引器,那么这将产生多大的差异——这将是一个非常大的数据集——但我始终强调,在if语句的开头放置最简单的条件,使用&&:可以产生很大的差异,特别是在多个循环中)啊哈,我的糟糕,感觉我今天早上还没有完全起床。呵呵,别担心-现在失去tochararray呼叫-它们也是超级的;)如果你说的是“G12A”和“GAA2”,它会返回3。G、 A和2.使用string s1=“G12A”可以得到什么?当s2=“GAA2”s1中


=s2[i2])-参见“短路”:(值得怀疑的是,既然您在第一个条件下正确使用了字符串索引器,那么这将产生多大的差异——这将是一个非常大的数据集——但我始终强调,在if语句的开头放置最简单的条件,使用&&:可以产生很大的差异,特别是在多个循环中)啊哈,我的糟糕,感觉我今天早上还没有完全起床。呵呵,别担心-现在失去tochararray呼叫-它们也是超级的;)如果你说的是“G12A”和“GAA2”,它会返回3。G、 A和2.使用
string s1=“G12A”可以得到什么?当s2=“GAA2”s1中的所有4个字符都存在时,4有何错误?@Amit但它们都有一个相同的“a”,而不是两个。参见Tommy的第一个示例感谢@L.B讲述重复角色的场景您可以使用
Zip
,就像我在回答中所说的那样,以避免完全计算两组。
    public int CommonCharacters(string s1, string s2)
    {
        bool[] matchedFlag = new bool[s2.Length];

        for (int i1 = 0; i1 < s1.Length; i1++)
        {
            for (int i2 = 0; i2 < s2.Length; i2++)
            {
                if (!matchedFlag[i2] && s1.ToCharArray()[i1] == s2.ToCharArray()[i2])
                {
                    matchedFlag[i2] = true;
                    break;
                }
            }
        }

        return matchedFlag.Count(u => u);
    }
static void Main(string[] args)
{
    IEnumerable<char> a = "G010".ToCharArray();
    IEnumerable<char> b = "G1820A".ToCharArray();

    int commonChars = FindCommonElements(a, b).Count();
    Console.WriteLine(commonChars);

    Console.ReadLine();
}

private static T[] FindCommonElements<T>(IEnumerable<T> source, IEnumerable<T> target)
{
    ILookup<T, T> lookup2 = target.ToLookup(i => i);

    return (
      from group1 in source.GroupBy(i => i)
      let group2 = lookup2[group1.Key]
      from i in (group1.Count() < group2.Count() ? group1 : group2)
      select i
    ).ToArray();
}
        string s1 = "G12A";
        string s2 = "GAA2";
        List<char> lst1 = s1.ToList();
        List<char> lst2 = s2.ToList();
        int count = 0;
        foreach (char c in lst2)
        {
            if (lst1.Contains(c))
            {
                lst1.Remove(c);
                count++;
            }
        }
        Console.WriteLine(count);
 public int CommonCharacterCount(string s1, string s2)
            { 
                var r=0;
                Dictionary<char,int> s2Dict = new Dictionary<char,int>();
                foreach (var ch in s2)
                {
                    if (s2Dict.ContainsKey(ch))
                        s2Dict[ch] = s2Dict[ch]+1;
                    else s2Dict.Add(ch,1);
                }

                foreach (var c in s1)
                {
                    if (s2Dict.ContainsKey(c) && s2Dict[c]>0)
                    {
                        r++;
                        s2Dict[c] = s2Dict[c] - 1;
                    }
                }
                return r;
            }
    int MyCount(string s1, string s2)
    {
        return s1.Count(c =>
                            {
                                var i = s2.IndexOf(c);
                                if (i >= 0)
                                {
                                    s2 = s2.Remove(i, 1);
                                    return true;
                                }
                                return false;
                            });
    }
public int CommonChars(string left, string right)
{
    return left.GroupBy(c => c)
        .Join(
            right.GroupBy(c => c),
            g => g.Key,
            g => g.Key,
            (lg, rg) => lg.Zip(rg, (l, r) => l).Count())
        .Sum(); 
}
public static int CommomCount<T>(
        this IEnumerable<T> source,
        IEnumerable<T> sequence,
        IEqualityComparer<T> comparer = null)
{
    if (sequence == null)
    {
        return 0;
    }

    if (comparer == null)
    {
        comparer = EqualityComparer<T>.Default;
    }

    return source.GroupBy(t => t, comparer)
        .Join(
            sequence.GroupBy(t => t, comparer),
            g => g.Key,
            g => g.Key,
            (lg, rg) => lg.Zip(rg, (l, r) => l).Count(),
            comparer)
        .Sum();
}
"G12AA".CommonCount("GAA2")
public static IEnumerable<T> Commom<T>(
        this IEnumerable<T> source,
        IEnumerable<T> sequence,
        IEqualityComparer<T> comparer = null)
{
    if (sequence == null)
    {
        return Enumerable.Empty<T>();
    }

    if (comparer == null)
    {
        comparer = EqualityComparer<T>.Default;
    }

    return source.GroupBy(t => t, comparer)
        .Join(
            sequence.GroupBy(t => t, comparer),
            g => g.Key,
            g => g.Key,
            (lg, rg) => lg.Zip(rg, (l, r) => l),
            comparer)
        .SelectMany(g => g);
}
Console.WriteLine(new string("G12AA".Common("GAA2").ToArray()));
"G12AA".Common("GAA2").Count();
string myname = "1234";
        string yourname = "12";
        char[] sam = new char[] { };
        sam = myname.ToCharArray();
        char[] sam1 = new char[] { };
        sam1 = yourname.ToCharArray();
        int id = 0;
        int id1 = 0;
        List<string> found = new List<string>();
        List<string> found1 = new List<string>();
        foreach (char item in sam)
        {
            if (found.Contains(item.ToString()))
            {
                found.Add(item.ToString() + id);
                id++;
            }
            else
                found.Add(item.ToString());
        }
        foreach (var item in sam1)
        {
            if (found1.Contains(item.ToString()))
            {
                found1.Add(item.ToString() + id);
                id1++;
            }
            else
                found1.Add(item.ToString());
        }
        var final = found.Except(found1);
        var final2 = found1.Except(found);
        var checkingCount = final.Count() + final2.Count();
        Console.Write(checkingCount);
        Console.ReadLine();