java codility training Genomic-range-query

后端 未结 30 2713
悲哀的现实
悲哀的现实 2021-02-01 12:47

The task is:

A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper-case English letters A, C, G, T.

<
30条回答
  •  旧时难觅i
    2021-02-01 13:26

    This is a Swift 4 solution to the same problem. It is based on @codebusta's solution above:

    public func solution(_ S : inout String, _ P : inout [Int], _ Q : inout [Int]) -> [Int] {
    var impacts = [Int]()
    var prefixSum = [[Int]]()
    for _ in 0..<3 {
        let array = Array(repeating: 0, count: S.count + 1)
        prefixSum.append(array)
    }
    
    for (index, character) in S.enumerated() {
        var a = 0
        var c = 0
        var g = 0
    
        switch character {
        case "A":
            a = 1
    
        case "C":
            c = 1
    
        case "G":
            g = 1
    
        default:
            break
        }
    
        prefixSum[0][index + 1] = prefixSum[0][index] + a
        prefixSum[1][index + 1] = prefixSum[1][index] + c
        prefixSum[2][index + 1] = prefixSum[2][index] + g
    }
    
    for tuple in zip(P, Q) {
        if  prefixSum[0][tuple.1 + 1] - prefixSum[0][tuple.0] > 0 {
            impacts.append(1)
        }
        else if prefixSum[1][tuple.1 + 1] - prefixSum[1][tuple.0] > 0 {
            impacts.append(2)
        }
        else if prefixSum[2][tuple.1 + 1] - prefixSum[2][tuple.0] > 0 {
            impacts.append(3)
        }
        else {
            impacts.append(4)
        }
    }
    
       return impacts
     }
    

提交回复
热议问题