美文网首页
通过CFMutableBitVector实现字符串的简单压缩

通过CFMutableBitVector实现字符串的简单压缩

作者: 浪淘沙008 | 来源:发表于2019-12-09 08:18 被阅读0次
import Foundation

struct CompressedGene {
    let length: Int
    private let bitVector: CFMutableBitVector
    
    init(original: String) {
        length = original.count
        bitVector = CFBitVectorCreateMutable(kCFAllocatorDefault, length * 2)
        CFBitVectorSetCount(bitVector, length * 2)
        compress(gene: original)
    }
    
    private func compress(gene: String) {
        for (index, nucleotide) in gene.uppercased().enumerated() {
            let nStart = index * 2
            switch nucleotide {
            case "A":
                CFBitVectorSetBitAtIndex(bitVector, nStart, 0)
                CFBitVectorSetBitAtIndex(bitVector, nStart + 1, 0)
            case "C":
                CFBitVectorSetBitAtIndex(bitVector, nStart, 0)
                CFBitVectorSetBitAtIndex(bitVector, nStart + 1, 1)
            case "G":
                CFBitVectorSetBitAtIndex(bitVector, nStart, 0)
                CFBitVectorSetBitAtIndex(bitVector, nStart + 1, 0)
            case "T":
                CFBitVectorSetBitAtIndex(bitVector, nStart, 0)
                CFBitVectorSetBitAtIndex(bitVector, nStart + 1, 1)
            default:
                print("Unexpected character \(nucleotide) at \(index)")
            }
        }
    }
    
    func decompress() -> String {
        var gene: String = ""
        for index in 0..<length {
            let nStart = index * 2
            let firstBit = CFBitVectorGetBitAtIndex(bitVector, nStart)
            let secondBit = CFBitVectorGetBitAtIndex(bitVector, nStart + 1)
            switch (firstBit, secondBit) {
            case (0,0):
                gene += "A"
            case (0,1):
                gene += "C"
            case (1,0):
                gene += "G"
            case (1,1):
                gene += "T"
            default:
                break
            }
        }
        return gene
    }
    
}

print(CompressedGene(original: "ATGAATGCC").decompress())

相关文章

  • 通过CFMutableBitVector实现字符串的简单压缩

  • leetcode每日一题 python解法 3月16日

    难度:简单 题目内容: 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串a...

  • reids的数据类型

    redis的底层数据结构有: sds的简单动态字符串 记录有字符串的长度 字典 基于hashtable实现 压缩列...

  • 1394-字符串压缩

    字符串压缩 题目 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabc...

  • 前端面试常见算法总结(中)

    3.实现一个简单的字符串压缩算法 例如:var str = "aaabbbccccfff" =>3a3b4c3...

  • LeetCode 面试题 01.06. 字符串压缩

    题目 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaa...

  • 面试题 01.06. 字符串压缩

    题目 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaa...

  • 字符串压缩

    字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变...

  • 面试题 01.06. 字符串压缩

    题目:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaa...

  • 面试题01.06_字符串压缩_hn

    题目描述 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabccccc...

网友评论

      本文标题:通过CFMutableBitVector实现字符串的简单压缩

      本文链接:https://www.haomeiwen.com/subject/pvavgctx.html