187. Repeated DNA Sequences

2020-03-19  本文已影响0人  7ccc099f4608

https://leetcode-cn.com/problems/repeated-dna-sequences/

image.png

(图片来源https://leetcode-cn.com/problems/repeated-dna-sequences/

日期 是否一次通过 comment
2020-03-19 0

public List<String> findRepeatedDnaSequences2(String str) {
        List<String> res = new ArrayList<>();
        if(str == null || str.length() < 10) {
            return res;
        }

        Set<Integer> wordSet = new HashSet<>();
        Set<Integer> secondWordSet = new HashSet<>();
        int[] map = new int[26];   // 实际上用不了这么大;但这么写,爸爸省事儿啊
        map['C' - 'A'] = 1;
        map['G' - 'A'] = 2;
        map['T' - 'A'] = 3;

        int value = 0;
        for (int i = 0; i < str.length(); i++) {
            value <<= 2;  // 每次向左移动2位
            value |= map[str.charAt(i) - 'A'];
            value &= 0xfffff;  // 16进制,每个占4位,所以 4*5==20位
            if (i < 9) {
                continue;
            }

            // 只存在一次:wordSet里有,secondWordSet没有
            if(wordSet.contains(value)) {
                res.add(str.substring(i-9, i+1));
            } else {
                wordSet.add(value);
            }
//            if (!wordSet.add(value) && secondWordSet.add(value)) {  // set.add() 无重复则返回true,反之为false
//                res.add(str.substring(i - 9, i + 1)); // [i-9,i+1)
//            }
        }

        return res;
    }
上一篇下一篇

猜你喜欢

热点阅读