• + 0 comments

    Here is my solution in Golang

    func isPatternMatch(grid []string, rowStart, colStart int, pattern []string) bool {
    	patternWidth := len(pattern[0])
    
    	for rowOffset := 0; rowOffset < len(pattern); rowOffset++ {
    		gridRow := grid[rowStart+rowOffset]
    		gridSubstring := gridRow[colStart:(colStart + patternWidth)]
    		patternRow := pattern[rowOffset]
    
    		if gridSubstring != patternRow {
    			return false
    		}
    	}
    
    	return true
    }
    
    func gridSearch(grid []string, pattern []string) string {
    	gridWidth := len(grid[0])
    	patternWidth := len(pattern[0])
    	patternHeight := len(pattern)
    
    	for gridRow := 0; gridRow <= len(grid)-patternHeight; gridRow++ {
    		for gridCol := 0; gridCol <= gridWidth-patternWidth; gridCol++ {
    
    			// Check if current position could be the start of a pattern match
    			if grid[gridRow][gridCol] == pattern[0][0] {
    
    				// Verify there's enough space to check for the pattern
    				if isPatternMatch(grid, gridRow, gridCol, pattern) {
    					return "YES"
    				}
    			}
    		}
    	}
    
    	return "NO"
    }