題目如下:
解題思路:拋開移動的過程只看移動完成的結果,記圖片左上角為頂點,正方形邊長為board,要使得兩個圖片要有重疊,那么一定其中一張圖片的頂點和另外一張圖片的某一個點重合。假設圖片A的頂點A(0,0)和圖片B的其中一個點B(x,y)重合,那么A與B重合的區域就是A(0,0) -> A(board-x,board-y) ,B(x,y) -> B(board,board) ,計算A與B的重合部分中每個點都為1的個數就是A(0,0)與B(x,y)重合時候能得到的overlap。最后計算出B中所有點與A(0,0)重合和A中所有點與B(0,0)重合的overlap,求出最大值即可。
代碼如下:
class Solution(object): def getOverlap(self,a,b,ax,ay): count = 0 for i in range(ax,len(a)): for j in range(ay,len(a[i])): if a[i][j] == b[i-ax][j-ay] == 1: count += 1 return count def largestOverlap(self, A, B): """ :type A: List[List[int]] :type B: List[List[int]] :rtype: int """ res = 0 board = len(A) for i in range(board): for j in range(board): res = max(res,self.getOverlap(A,B,i,j)) res = max(res, self.getOverlap(B, A, i, j)) return res