2d Array包含其他2d Array



找到一个二维数组包含任何其他二维数组的最佳解决方案是什么?例如:

char a[][]={{'a','b'}, {'b','a'}}
char b[][]={{'a','b'}, {'b','a'}, {'a','b'}, {'a','b'}, {'a','b'}, {'b','a'}}

那么答案应该是2,因为b包含一个2。

我在这里写一个蛮力解决方案:

的想法:

从矩阵的左上角(0,0)开始,你想在其中找到另一个二维数组。

将大矩阵的元素与小矩阵的元素逐行匹配,如果所有行的所有元素都匹配,则找到2d数组。如果任何一行的任何条目不匹配,则转到下一个2d子数组。

下一个2d子数组将从(0,1)开始。

直到没有子数组可检查为止。

class Twodarray
{
 public static void main(String []args)
 {
  char a[][]={{'a','b'}, {'b','a'}};
  char b[][]={{'a','b','c'}, {'b','a','d'}, {'a','b','a'}, {'a','b','b'}, {'a','b','a'}, {'b','a','a'}};
  int c=number_of_2d_arrays(b,a);
  System.out.println(c);
 }
  public static int number_of_2d_arrays(char [][]arr1,char [][]arr2)
    {
     int i=0,j=0,c=0;
     while(true)
     {
      int row=i,col=j;      
      if(arr2.length>arr1.length-row)
      {
       break;
      }
      else if(arr2[0].length>arr1[0].length-col&&col==0)
      {break;}
      else if(arr2[0].length>arr1[0].length-col)
      {++i;j=0;}
      else
      {
       boolean matches=true;
       for(int a=0;a<arr2.length;++a)
       {col=j;
        for(int b=0;b<arr2[0].length;++b)
        {         
         if(arr1[row][col++]!=arr2[a][b])
         {matches=false;break;}
        }    
        if(!matches)
         break;
        ++row;
       }       
       if(matches)
        {++c;}
       ++j;
      }
     }
    return c;
    }
}

相关内容

  • 没有找到相关文章

最新更新