日期:2014-05-17  浏览次数:20382 次

用最快的方法可以找出几个数组中相同的字符串?
如下三个数组
 stra = Adit, Bdd, C, Iou
 strb = B, C, Iou, E
 strc = Ee, F, C, H, Iou

以上是数组,只是简单写法.数组个数不一样.

最后输出一个数组,结果为: C,Iou
即三个数组中都存在的字符串.

请问用什么方法最快.


------解决方案--------------------
關注
------解决方案--------------------
有很多方法吗?
我只想到一种:
C# code

foreach(string s in stra )
{
 for(int i=0;i<strb.Length;i++)
   {
    if(s!=strb[i]) break;
    else 
    {
      for(int j=0;j<strc.Length;j++)
      {
         if(s!=strc][i]) break;
         else {取得这个字符;}
      }
    }
    }
}

------解决方案--------------------
现对所有数组排序

然后选择数量最少那个数组,循环到其他两个数组里去匹配,先匹配字符串的个数以及第一个和中间一个和最后一个字符是否相等,再匹配其他的字符,如果第一个字符都不相等,则停止匹配,记录已经匹配过的index位置,下个循环从这个位置开始。
------解决方案--------------------
1 ,找出最少数据的数组(因为相同数据最大可能值就是最少数据的数组),其它数组按1,2,3进行编号
2 ,遍历该数据与其它数组1中所数据进行比较,如果存在相同的,则继续与数组2中的数据比较,失败则直接进入下一个字符的比较
如果比较到最后一数组都相同,则证明那一个是所有数组都存在。
3 ,这是一个很笨的想法,希望朋友们尽情拍砖
------解决方案--------------------
C# code
string[] stra;

        string[] strb;

        string[] strc;

        string strbs = "," + string.Join(",", strb) + ",";
        string strcs = "," + string.Join(",", strc) + ",";
        for (int i = 0; i < stra.Length; i++)
        {
            if (strbs.IndexOf("," + stra[i] + ",") >= 0 && strcs.IndexOf("," + stra[i] + ",") >= 0)
            {
                //stra[i]为重复
            }
        }

------解决方案--------------------
Linq...
C# code
return stra.Intersect(strb).Intersect(strc);

------解决方案--------------------
C# code

public string[] GetSameItem()
        {
            string[] stra = { "Adit", "Bdd", "C", "Iou" };
            string[] strb = { "B", "C", "Iou", "E" };
            string[] strc = { "Ee", "F", "C", "H", "Iou" };

            string[] strd = new string[stra.Length + strb.Length + strc.Length];
            ArrayList list = new ArrayList();

            stra.CopyTo(strd, 0);
            strb.CopyTo(strd, stra.Length);
            strc.CopyTo(strd, stra.Length + strb.Length);

            Array.Sort(strd);
            for (int i = 0; i < strd.Length; i++)
            {
                if (strd[i] == strd[i + 1] && strd[i] == strd[i + 2])
                {
                    list.Add(strd[i]);
                    i = i + 2;
                }
            }

            return (string[])list.ToArray(typeof(string));
        }

------解决方案--------------------
把3个数组合并到一个数组里,在把这个合并后的数组排序.
查看是否有连续3个都相同的元素.
------解决方案--------------------
代码写得简单还是执行速度快?
------解决方案--------------------
UP
------解决方案--------------------
同意
------解决方案--------------------
支持7楼。
学习中……