harrytothemoon / leetcodeAplus

Leetcode meeting note
2 stars 0 forks source link

[187] Repeated DNA Sequences #10

Open tsungtingdu opened 3 years ago

tsungtingdu commented 3 years ago
var findRepeatedDnaSequences = function(s) {
    if (s.length < 11) return []

    let dic = {}
    let ans = []

    for (let i = 0; i < s.length - 9; i++) {
        let cur = s.slice(i, i + 10)
        if (dic[cur] === 1) {
          ans.push(cur)
          dic[cur] += 1
        } 

        if (!dic[cur]) dic[cur] = 1
    }
    return ans
};

用 Set 的速度稍微快一點點,推測在 JavaScript 當中 Set 的操作速度比 array 快 (?)

var findRepeatedDnaSequences = function(s) {
    if (s.length < 11) return []

    let dic = new Set()
    let ans = new Set()

    for (let i = 0; i < s.length - 9; i++) {
        let cur = s.substring(i, i + 10)
        if (dic.has(cur)) {
          ans.add(cur)
        } else {
          dic.add(cur)  
        }
    }
    return [...ans]
};
schiafang commented 3 years ago
var findRepeatedDnaSequences = function(s) {
  const map = new Map()
  const result = []

  for(let i = 0; i < s.length; i ++) {
      let split = s.substring(i, 10 + i)
      if(split.length === 10) {
        let value = map.get(split)
        map.has(split) ? map.set(split, value += 1) : map.set(split, 1)
      }
  }

  for(let [key, value] of map) {
    if(value > 1) result.push(key)
  }

  return result
};
ShihTingJustin commented 3 years ago

只想到暴力解 Runtime: 20% 好慢...

var findRepeatedDnaSequences = function(s) {
    let result = [] 
    if (s.length < 11) return result
    let map = {}
    for (let i = 0; i + 10 <= s.length; i++) {
      let str = s.substring(i, i + 10)
      map[str] ? map[str]++ : map[str] = 1
    }
    return Object.keys(map).filter(key => map[key] >= 2)  
};
harrytothemoon commented 3 years ago
var findRepeatedDnaSequences = function(s) {
    if (s.length < 11) return []
    let set = new Set()
    let res = new Set()
    for (let i = 0; i <= s.length - 10; i++) {
        let sub = s.slice(i, i + 10)
        if (set.has(sub)) res.add(sub)
        else set.add(sub)  
    }
    return [...res]
};
henry22 commented 3 years ago
/**
 * @param {string} s
 * @return {string[]}
 */
var findRepeatedDnaSequences = function(s) {
    const seen = {}
    const res = []
    let i = 0

    while(i + 10 <= s.length) {
        const dna = s.slice(i, i + 10)
        seen[dna] = seen[dna] + 1 || 1

        if(seen[dna] === 2) {
            res.push(dna)
        }

        i++
    }

    return res
};