注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
求问这一题为什么会超时啊,我就是按implement trie那题的思路建立trie,然后用递归做dfs,代码应该没什么问题,但就是超时了,是建树有什么复杂度低一点的方法吗
public class WordDictionary {
private TrieNode root= new TrieNode();
// Adds a word into the data structure.
public void addWord(String word) {
HashMap<Character,TrieNode> children=root.children;
TrieNode next=null;
for(int i=0;i<=word.length()-1;i++)
{
char c=word.charAt(i);
if(children.containsKey(c))
{
next=children.get(c);
children=next.children;
}
else
{
next=new TrieNode(c);
children.put(c,next);
children=next.children;
}
if(i==word.length()-1) next.isLeaf=true;
}
}
// Returns if the word is in the data structure. A word could
// contain the dot character '.' to represent any one letter.
public boolean search(String word) {
return searchhelper(root,word,0);
}
public boolean searchhelper(TrieNode root, String word,int index)
{
if(root==null) return false;
if(word==null||word.length()==0) return true;
if(index==word.length()&&root.isLeaf) return true;
if(index>=word.length()) return false;
HashMap<Character,TrieNode> children=root.children;
char c=word.charAt(index);
if(c=='.')
{
for(char key:children.keySet())
{
if(searchhelper(children.get(key),word,index+1)) return true;
}
}
else
{
if(!children.containsKey(c)) return false;
else
{
return searchhelper(children.get(c),word,index+1);
}
}
return false;
}
class TrieNode {
char c;
HashMap<Character,TrieNode> children=new HashMap<Character,TrieNode>();
boolean isLeaf=false;
public TrieNode(char c){
this.c=c;
}
public TrieNode(){
}
}
}
|