• + 0 comments

    Swift & charater array

    func gridSearch(G: [String], P: [String]) -> String {
        // Write your code here
        
        guard G.count >= P.count else {
           return "NO"
        }
        
        guard G != P else {
            return "YES"
        }
        
        func isEq(c1: [Character], start: Int, end: Int, c2:[Character]) -> Bool {
            if end >= c1.count {
                return false
            }
            for i in start...end {
                if c1[i] != c2[i-start] {
                    return false
                }
            }
            return true
        }
        
        let cG = G.map{ [Character]($0) }
        let cP = P.map{ [Character]($0) }
        let firstP = cP[0]
        let pCountForIndex = firstP.count-1
        
        func check(index: Int, indexR: Int, endR: Int) -> Bool {
            guard (cG.count - index) >= cP.count else {
                return false
            }
            var indexG = index
            var indexP = 0
            while indexG < cG.count && indexP < cP.count {
                if !isEq(c1: cG[indexG], start: indexR, end: endR, c2: cP[indexP]) {
                    return false
                }
                indexG += 1
                indexP += 1
            }
            return true
        }
        
        for (index, row) in cG.enumerated() {
            for (indexR, charR) in row.enumerated() {
                if charR == firstP[0] {
                    if check(index: index, indexR: indexR, endR: pCountForIndex+indexR) {
                        return "YES"
                    }
                }
            }
        }
        
        return "NO"
    }