有一批文件,其中都包含一段相同的内容,不知道此内容的长度。如何能够检测出这段内容呢?

解决方案 »

  1.   

    我这个算法肯定不是高明的,甚至是垃圾的。抛砖引玉了!以下,用三个String代替三个文本文件测试,并且只能返回第一段相同的内容。procedure TForm1.Button1Click(Sender: TObject);
    var
      S1, S2, S3 : string;
      I : integer;
      Found : boolean;
    begin
      S1 := Memo1.Text; //用三个string测试
      S2 := Memo2.Text;
      S3 := Memo3.Text;
      Found := false;
      for I := 1 to Length(S1) do  //先找到第一个相同的字符
        if (Pos(S1[I], S2)>0) and (Pos(S1[I], S3)>0) then
           begin
           Found := true;
           Break;
           end;
      if Found then
         begin
         S2 := Copy(S2, Pos(S1[I],S2), MaxInt);
         S3 := Copy(S3, Pos(S1[I],S3), MaxInt);
         S1 := Copy(S1, I, MaxInt);
         for I := 1 to Math.Min(Math.Min(Length(S1),Length(S2)),Length(S3)) do
             if (S1[I] <> S2[I]) or (S1[I] <> S3[I]) then break;
         Memo4.Text := Copy(S1, 1, I-1);//相同的内容
         end else Memo4.Text := '没找到任何相同的内容';
    end;procedure TForm1.FormCreate(Sender: TObject);// 'ABC'相同
    begin
      Memo1.Text := '123ABCD';
      Memo2.Text := '45ABCD67';
      Memo3.Text := '8ABC9D';
    end;如果不是文本文件,我想处理的算法应该是一样的。再就是,第二个循环是不是可以用集合运算更快。不怕楼主及阅贴者笑话了。哈哈。
      

  2.   

    To:lihuasoft(学习低调做人)有启发,不过可能效率上比较难接受。