需要一个这样的方法
int calc(string left,string right)
返回值为字符串left的右半部分与字符串right的左半部分重复字符的个数。
比如 left="hello" right="lloabc" 返回 3
比如 left="world" right="doit" 返回 1
比如 left="hello" right="helloworld" 返回 5
比如 left="hello" right="hello" 返回 5
比如 left="hello" right="world" 返回 0我只想到先取left的最右边一个字符与right的最左边一个字符比较,再取left的最右边两个字符与right的最左边两个字符比较,再取left的最右边三个字符与right的最左边三个字符比较……这样子很耗时,有没有什么好办法呢?

解决方案 »

  1.   

     字符串含数内部差不多都这样啊 ,只是调用的时候看起来简单 如果嫌麻烦
     这个 。。其实可以用正则式搞定
     把left和right合并,中间用分割符号如%
    用以下正则式
    (.*)%\1.*? 
     如hello%lloabc匹配 llo hello%helloworld  匹配hello哈哈 ,返回匹配索引就是 
      

  2.   

    但是这样有可能出问题的
    比如left="hello%lloabc" right="abcdefg"
      

  3.   

    你弄个基本上不会重复的分割符不一定单个字符。。
     要说效率,当然是写几个for比较快,我说的是偷懒的方法
      

  4.   

      // 返回值为字符串left的右半部分与字符串right的左半部分重复字符的个数。
      static int calc(string left, string right)
      {
        if (left == null || right == null) return 0;
        int p = left.Length;
        int q = right.Length;
        for (int r = p < q ? p : q; r > 0; r--)
          if (left.Substring(p - r) == right.Substring(0, r)) return r;
        return 0;
      } 
      

  5.   

    for(int i = 0; i < left.length; i++)
       if((left.substring(0,i+1) + right).startWith(left))
           return left.lenth - i;
    return 0;
      

  6.   

    public int calc(string left, string right)
            {
                int count = 0;
                if (right.IndexOf(left) == 0)
                {
                    count = left.Length;
                }
                else
                {
                    while (left.Length > 0)
                    {
                        left = left.Remove(0,1);
                        if (right.IndexOf(left) == 0)
                        {
                            count = left.Length;
                            break;
                        }                }
                }
                return count;
            }
      

  7.   

    不用对right做任何处理,只对left做处理即可。