187. Repeated DNA Sequences
2020-03-19 本文已影响0人
7ccc099f4608
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;
}