如何以最快的方式做到这一点?

时间:2014-04-12 18:17:16

标签: string find pascal

我需要找出一个单词出现在字符串中的时间,但问题是你需要找到的单词之间可以有空格,例如你想查看单词 text <多少次/ em>出现在* tOeOxOt“并且它会给你输出1,或者例如在 textt 中它会给你输出2,我已经在pascal中为此写了这个程序

procedure search(x:integer; i:integer);
var
x2:integer;
begin
x2:=x+1;
while (x2<=n) and (x2>0) do begin
    if myarray[x2]=mystring[i+1] then
        if i=length(mystring)-1 then
        final:=final+1
        else
        search(x2,i+1);

x2:=x2+1;
end;
end;

它会检查一个字母出现的时间,例如,如果我有 ttext 它只会给我一个,因为我只检查第一个 t 所以我每次在字符串中找到 t 时都会调用该函数,但对于包含许多字符的2D数组,这个方法太慢了,比如1000x1000,所以我正在寻找更快的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以检查数组两次,在第一次运行时删除所有空格。 在第二个使用这样的比较函数(x是你搜索的数组,y是你要搜索的子字符串,我是你正在检查的当前元素):

function compare(var x,y:myarray; i:integer):boolean;
var l:integer;
Begin
  compare:=false;
  for l:=1 to length(y) do Begin
    if x[i+l] <> y[l] then Exit;
  End;
  compare:=true;
End;

在数组的每个元素上。