JavaScript

字符串正则匹配问题算法题

2021-04-06  本文已影响0人  Lia代码猪崽

题目

设计一个支持以下两种操作的数据结构:

void addWord(word)
bool search(word)

search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 .a-z
. 可以表示任何一个字母。

示例:

addWord("bad")
addWord("dad")
addWord("mad")
search("pad") // false
search("bad")  // true
search(".ad")  // true
search("b..")  // true

思路分析

代码

class WordDictionary {
  constructor() {
    this.words = {}
  }

  addWord(word) {
    if (this.words[word.length]) {
      this.words[word.length].push(word)
    } else {
      this.words[word.length] = [word]
    }
  }

  search(word) {
    // 若该字符串长度在 Map 中对应的数组根本不存在,则可判断该字符串不存在
    if (!this.words[word.length]) {
      return false
    }

    // 缓存目标字符串的长度
    const len = word.length
    // 如果字符串中不包含‘.’,那么一定是普通字符串
    if (!word.includes('.')) {
      return this.words[len].includes(word)
    }
    // 否则是正则表达式,要先创建正则表达式对象
    const reg = new RegExp(word)
    return this.words[len].some((item) => {
      return reg.test(item)
    })
  }
}

const wordDictionary = new WordDictionary()
wordDictionary.addWord("bad")
wordDictionary.addWord("dad")
wordDictionary.addWord("mad")
wordDictionary.search("pad") // false
wordDictionary.search("bad")  // true
wordDictionary.search(".ad")  // true
wordDictionary.search("b..")  // true
上一篇下一篇

猜你喜欢

热点阅读