编写一个比较两个字符串并返回第三个字符串的函数,该字符串仅包含两个字母中出现的字母

Pri*_*kar 13 .net c# algorithm data-structures

我做了这个功课.并以下列方式解决了它.我需要你的意见是否是一个好的方法,或者我需要使用任何其他数据结构以更好的方式解决它.

    public string ReturnCommon(string firstString, string scndString)
    {
        StringBuilder newStb = new StringBuilder();
        if (firstString != null && scndString != null)
        {
            foreach (char ichar in firstString)
            {
                if (!newStb.ToString().Contains(ichar) && scndString.Contains(ichar))
                    newStb.Append(ichar);
            }
        }
        return newStb.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

Bri*_*sen 19

对于替代解决方案,您可以将字符串视为可枚举,并使用Intersect()如下所示:

    public static string Common(string first, string second)
    {
        return new string((first.Intersect(second)).ToArray());
    }
Run Code Online (Sandbox Code Playgroud)


Joh*_*lla 8

这对于第一种方法来说很好,但是你可以做一些改进,并且有一个小错误.

  • 如果b包含a已经存在的角色c,您将重复它.
  • 为避免重复,您可以考虑使用a Set来存储字符,因为a Set不会重复.
  • 使用+=串联组装字符串通常效率低下; 考虑使用一个StringBuilder或类似的字符串汇编类.
  • 您的变量名称不是很具描述性.
  • 如果a或是b空的,你根本不需要做任何工作!只需返回一个空字符串.

通过想象如果开始使用大字符串,算法如何缩放,您可以考虑一些更复杂的改进.例如,一种方法可能是如果一个字符串比另一个字符串长得多,您可以对较长的字符串进行排序并删除重复字符串.然后,您可以非常快速地对较短字符串的字符进行二进制搜索.