C++
Java
Python
Python3
C
C#
JavaScript
Ruby
Swift
Go
Scala
Kotlin
Rust
PHP
TypeScript
Racket
Erlang
Elixir
Dart
monokai
ambiance
chaos
chrome
cloud9_day
cloud9_night
cloud9_night_low_color
clouds
clouds_midnight
cobalt
crimson_editor
dawn
dracula
dreamweaver
eclipse
github
github_dark
gob
gruvbox
gruvbox_dark_hard
gruvbox_light_hard
idle_fingers
iplastic
katzenmilch
kr_theme
kuroir
merbivore
merbivore_soft
mono_industrial
nord_dark
one_dark
pastel_on_dark
solarized_dark
solarized_light
sqlserver
terminal
textmate
tomorrow
tomorrow_night
tomorrow_night_blue
tomorrow_night_bright
tomorrow_night_eighties
twilight
vibrant_ink
xcode
上次编辑到这里,代码来自缓存 点击恢复默认模板
class WordDictionary {
public:
WordDictionary() {
}
void addWord(string word) {
}
bool search(string word) {
}
};
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary* obj = new WordDictionary();
* obj->addWord(word);
* bool param_2 = obj->search(word);
*/
运行代码
提交
javascript 解法, 执行用时: 5516 ms, 内存消耗: 94.8 MB, 提交时间: 2023-05-29 17:44:56
var WordDictionary = function() {
this.dir=new Set();
};
/**
* @param {string} word
* @return {void}
*/
WordDictionary.prototype.addWord = function(word) {
this.dir.add(word)
};
/**
* @param {string} word
* @return {boolean}
*/
WordDictionary.prototype.search = function(word) {
let reg=new RegExp('^'+word+'$');
for (const dirWord of this.dir) {
if(reg.test(dirWord)){
return true;
}
}
return false
};
/**
* Your WordDictionary object will be instantiated and called as such:
* var obj = new WordDictionary()
* obj.addWord(word)
* var param_2 = obj.search(word)
*/
python3 解法, 执行用时: 2300 ms, 内存消耗: 57.5 MB, 提交时间: 2023-05-29 17:43:37
class WordDictionary:
def __init__(self):
self.trie = dict()
def addWord(self, word: str) -> None:
cur = self.trie
for c in word:
if c in cur:
cur = cur[c]
else:
cur[c] = {}
cur = cur[c]
cur["#"] = {}
def search(self, word: str) -> bool:
word += "#"
bfs = deque([(0, self.trie)])
while bfs:
idx, cur = bfs.popleft()
if idx == len(word):
return True
if word[idx] == '.':
for nxt in cur.values():
bfs.append((idx+1,nxt))
elif word[idx] in cur:
bfs.append((idx+1,cur[word[idx]]))
return False
# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)
java 解法, 执行用时: 189 ms, 内存消耗: 96.8 MB, 提交时间: 2023-05-29 17:42:29
class WordDictionary {
private Trie root;
public WordDictionary() {
root = new Trie();
}
public void addWord(String word) {
root.insert(word);
}
public boolean search(String word) {
return dfs(word, 0, root);
}
private boolean dfs(String word, int index, Trie node) {
if (index == word.length()) {
return node.isEnd();
}
char ch = word.charAt(index);
if (Character.isLetter(ch)) {
int childIndex = ch - 'a';
Trie child = node.getChildren()[childIndex];
if (child != null && dfs(word, index + 1, child)) {
return true;
}
} else {
for (int i = 0; i < 26; i++) {
Trie child = node.getChildren()[i];
if (child != null && dfs(word, index + 1, child)) {
return true;
}
}
}
return false;
}
}
class Trie {
private Trie[] children;
private boolean isEnd;
public Trie() {
children = new Trie[26];
isEnd = false;
}
public void insert(String word) {
Trie node = this;
for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
int index = ch - 'a';
if (node.children[index] == null) {
node.children[index] = new Trie();
}
node = node.children[index];
}
node.isEnd = true;
}
public Trie[] getChildren() {
return children;
}
public boolean isEnd() {
return isEnd;
}
}
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary obj = new WordDictionary();
* obj.addWord(word);
* boolean param_2 = obj.search(word);
*/
javascript 解法, 执行用时: 1440 ms, 内存消耗: 115.1 MB, 提交时间: 2023-05-29 17:41:50
var WordDictionary = function() {
this.trieRoot = new TrieNode();
};
/**
* @param {string} word
* @return {void}
*/
WordDictionary.prototype.addWord = function(word) {
this.trieRoot.insert(word);
};
/**
* @param {string} word
* @return {boolean}
*/
WordDictionary.prototype.search = function(word) {
const dfs = (index, node) => {
if (index === word.length) {
return node.isEnd;
}
const ch = word[index];
if (ch !== '.') {
const child = node.children[ch.charCodeAt() - 'a'.charCodeAt()]
if (child && dfs(index + 1, child)) {
return true;
}
} else {
for (const child of node.children) {
if (child && dfs(index + 1, child)) {
return true;
}
}
}
return false;
}
return dfs(0, this.trieRoot);
};
class TrieNode {
constructor() {
this.children = new Array(26).fill(0);
this.isEnd = false;
}
insert(word) {
let node = this;
for (let i = 0; i < word.length; i++) {
const ch = word[i];
const index = ch.charCodeAt() - 'a'.charCodeAt();
if (node.children[index] === 0) {
node.children[index] = new TrieNode();
}
node = node.children[index];
}
node.isEnd = true;
}
getChildren() {
return this.children;
}
isEnd() {
return this.isEnd;
}
}
/**
* Your WordDictionary object will be instantiated and called as such:
* var obj = new WordDictionary()
* obj.addWord(word)
* var param_2 = obj.search(word)
*/
golang 解法, 执行用时: 420 ms, 内存消耗: 68 MB, 提交时间: 2023-05-29 17:40:57
type TrieNode struct {
children [26]*TrieNode
isEnd bool
}
func (t *TrieNode) Insert(word string) {
node := t
for _, ch := range word {
ch -= 'a'
if node.children[ch] == nil {
node.children[ch] = &TrieNode{}
}
node = node.children[ch]
}
node.isEnd = true
}
type WordDictionary struct {
trieRoot *TrieNode
}
func Constructor() WordDictionary {
return WordDictionary{&TrieNode{}}
}
func (d *WordDictionary) AddWord(word string) {
d.trieRoot.Insert(word)
}
func (d *WordDictionary) Search(word string) bool {
var dfs func(int, *TrieNode) bool
dfs = func(index int, node *TrieNode) bool {
if index == len(word) {
return node.isEnd
}
ch := word[index]
if ch != '.' {
child := node.children[ch-'a']
if child != nil && dfs(index+1, child) {
return true
}
} else {
for i := range node.children {
child := node.children[i]
if child != nil && dfs(index+1, child) {
return true
}
}
}
return false
}
return dfs(0, d.trieRoot)
}
/**
* Your WordDictionary object will be instantiated and called as such:
* obj := Constructor();
* obj.AddWord(word);
* param_2 := obj.Search(word);
*/
python3 解法, 执行用时: 3248 ms, 内存消耗: 84.8 MB, 提交时间: 2023-05-29 17:40:34
# 字典树
class TrieNode:
def __init__(self):
self.children = [None] * 26
self.isEnd = False
def insert(self, word: str) -> None:
node = self
for ch in word:
ch = ord(ch) - ord('a')
if not node.children[ch]:
node.children[ch] = TrieNode()
node = node.children[ch]
node.isEnd = True
class WordDictionary:
def __init__(self):
self.trieRoot = TrieNode()
def addWord(self, word: str) -> None:
self.trieRoot.insert(word)
def search(self, word: str) -> bool:
def dfs(index: int, node: TrieNode) -> bool:
if index == len(word):
return node.isEnd
ch = word[index]
if ch != '.':
child = node.children[ord(ch) - ord('a')]
if child is not None and dfs(index + 1, child):
return True
else:
for child in node.children:
if child is not None and dfs(index + 1, child):
return True
return False
return dfs(0, self.trieRoot)
# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)