找到一个二维数组包含任何其他二维数组的最佳解决方案是什么?例如:
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;
}
}