首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请问算法高手:检测不同文件中的相同内容

2012-04-02 
请教算法高手:检测不同文件中的相同内容,有一批文件,其中都包含一段相同的内容,不知道此内容的长度。如何能

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

[解决办法]
不知道此内容的长度
总要有最小长度吧
不然 如果 是 一个字节
那么 相同的 岂不是 太多了
[解决办法]
我这个算法肯定不是高明的,甚至是垃圾的。抛砖引玉了!

以下,用三个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;

如果不是文本文件,我想处理的算法应该是一样的。再就是,第二个循环是不是可以用集合运算更快。

不怕楼主及阅贴者笑话了。哈哈。
[解决办法]
嗯。是的。第一个循环效率最差。但又必须首先找出第一个相同的字符。我是没辙了 ^_^
第二个循环,可以参考集合“与”运算,整块整块地比对。

热点排行