例如:字符串A:“01234567890”长度为10、字符串B:“01238767890”长度也为10;
两个长度相同的字符串比较,求它们最多并且连续的相同号最大长度是多少?
上面最大长度就是4。可算法如何设计呢?我感觉有点难度,故向高手请教了!
写过的给个参考算法,先谢谢了

解决方案 »

  1.   

    应该没有超级简单的方法。思路:从大到小作一个循环来判断吧,不如先是10个字符的没有,再取9各字符去pos,然后8个,找到后break。 就是最大。如果到1都没有,那就是没有了。
      

  2.   

    另外不知道
    12345aaaaa
    abcde12345这个算是 5还是0?
      

  3.   

    c++里面好象有专门的这样的函数
    好象是strcmp()不知道记得对还是不对了
      

  4.   

    用笨方法来循环-_-!  改进一下用二分法也可以。
    var a,b:PChar;
        i:integer;
    begin
       a:='12345aaaaa';
       b:='abcde12345';
       for i:=1 to length(a) do
        if not CompareMem(a,b,i) then
          begin
            ShowMessage(IntToStr(i-1));
            break;
          end;
    end;
      

  5.   

    对了,如果按你的思路:字符串
     a:='123aaa12345';
       b:='12312x12345';
    进行比较结果是3而不是5!所以也不太理想!!
      

  6.   

    var a,b:string;
        i,j,m,max:integer;
    begin
       max:=0;
       a:='123aaa12';
       b:='12312x12345';
       for i:=1 to length(a) do
       begin
         m:=0;
         for j:=i to length(a) do
          if a[j]=b[j] then m:=m+1 
         else break;
         if m>max then  max:=m;
       end;
       ShowMessage(IntToStr(max));
    end;
      

  7.   

    //老老实实做个循环
    var
      A, B: string;
      I, J: Integer;
    begin
      A := '01234567890';
      B := '01238767890';
      J := 0;
      for I := 1 to Length(A) do
        if A[I] <> B[I] then
        begin
          J := I - 1;
          Break;
        end;
      ShowMessage(IntToStr(J));
    end;
      

  8.   

    var
      A, B: string;
      I, J: Integer;
    begin
      A := '01234567890';
      B := '01238767890';
     
      J := Length(A); //这就修改一下,避免完全相同的情况得到0
      for I := 1 to Length(A) do
        if A[I] <> B[I] then
        begin
          J := I - 1;
          Break;
        end;
      ShowMessage(IntToStr(J));
    end;