如题:
   例如:输入任意一个字符串:abcfeabcedefeabcvegedfeabcdedfe
        运行结果把abc给打印出来。
   求它的公共部分出现次数最多且长度最长的子串...

解决方案 »

  1.   

    可能要用正则表达式和反向引用,但是我不会.
    可能会用到:\s(?<xxx>\w+)\s\k<xxx>\s ,不保证这个正则表式正确,
    只是提供一个可能的思路.
    再跟据匹配看那个出现的最多,坐等高人
      

  2.   

    不会正则,就用循环和subString截取来做。
      

  3.   


    出现次数最多长度最长肯定要有个优先级的,是先保证次数,还是先保证长度?但无论先保证哪个,都不会是楼主说的abc如果优先保证次数,那么字符e是出现次数最多的
    如果优先保证长度,那么子串feabc是最长的如果源字符串比较短的话,用正则是可以做到的,如果比较长的话,那还是自己实现算法吧
      

  4.   

    呵呵 花了我差不多一个小时才搞不出来 不好意思好 呵呵
      private string GetMostAndLongestString(string sourceString)
            {
                string tempString = sourceString;
                System.Text.StringBuilder sbString = new System.Text.StringBuilder("");            for (int getStringNum = 2; getStringNum < sourceString.Length; getStringNum++)//这层每次取多少个字符
                {
                    for (int i = 0; i < sourceString.Length; i++)//从第一个字符开始
                    {
                        for (int j = i + getStringNum; j < sourceString.Length - (i + getStringNum); j++)//按上面的从第一个字符开始取多少个字符
                        {
                            int stringNum = 0;
                            string subStr = tempString.Substring(i, j);
                            if (tempString.IndexOf(subStr) != -1)//判断传进来的字符串中有没有tempString.Substring(i, j)字符
                            {
                                //返回的字符串数组包含此字符串中的子字符串(由指定字符串数组的元素分隔)。参数指定是否返回空数组元素。 
                                stringNum = tempString.Split(new string[] { subStr }, StringSplitOptions.None).Length;//统计这个载取出来的字符在这个源字符串中有多少个
                            }
                            if (stringNum != 0 || stringNum !=1)//如果这个载出来的字符不等于零个或不等于一个就添加到结果字符串中
                            {
                                sbString.Append(subStr + ":" + stringNum + ";");//以键值对的方式保存
                            }
                        }
                    }
                }            //解析结果字符串
                string returnString = sbString.ToString();
                string[] strs = returnString.Split(new char[] { ';' });
                string maxString = strs[0];
                for (int i = 1; i < strs.Length; i++)
                {
                    if ((GetValue(maxString) <= GetValue(strs[i])) && GetName(maxString).Length < GetName(strs[i]).Length)
                    {
                        maxString = strs[i];
                    }
                }
                return GetName(maxString);
            }        private int GetValue(string subStr)
            {
                string[] sts = subStr.Split(new char[] { ':' });
                if (sts.Length >= 2)
                {
                    return Convert.ToInt32(sts[1]);
                }
                else
                {
                    return 0;
                }
            }        private string GetName(string subStr)
            {
                string[] sts = subStr.Split(new char[] { ':' });
                if (sts.Length >= 2)
                {
                    return sts[0];
                }
                else
                {
                    return "";
                }
            }
     调用方法
    GetMostAndLongestString("abcfeabcedefeabcvegedfeabcdedfe"); 
    注意:"aaaaaaaaaaa" 这种情况的话 可能就不是你想要的结果了 这时返回为 aa