Ich versuche, die problem zu lösen, im Wesentlichen müssen wir alle Wörter aus dem Wörterbuch finden, die das gegebene Präfix in lexikographischer Reihenfolge haben.Was kann eine schnellere Implementierung von Trie für den folgenden Anwendungsfall sein?
Ich benutze Trie Datenstruktur für die Aufgabe, aber meine Lösung einfach mal auf den Richter, was kann ein effizienter/schneller Weg, um dieses Problem zu lösen?
Meine aktuelle Implementierung ist
class trie{
node root=new node();
class node{
node child[]=new node[26];
boolean is_leaf=false;
}
public void add(char c[])
{
node root=this.root;
int pos=0,c1=0;
while(pos<c.length)
{
c1=c[pos]-'a';
if(root.child[c1]==null)
{
root.child[c1]=new node();
}
root=root.child[c1];
pos++;
}
root.is_leaf=true;
}
public ArrayList<String> search(String s)
{
char c[]=s.toCharArray();
node root=this.root;
int pos=0,c1=0;
while(pos<c.length)
{
c1=c[pos]-'a';
if(root.child[c1]==null)
{
root.child[c1]=new node();
}
root=root.child[c1];
pos++;
}
ArrayList<String> ans=new ArrayList<>();
build_recursive(root,s,new StringBuilder(),ans);
return ans;
}
public void build_recursive(node root,String prefix,StringBuilder cur, ArrayList<String> ans)
{
if(root.is_leaf&&cur.length()!=0)
{
String s=prefix+cur.toString();
ans.add(s);
}
for(int i=0;i<26;i++)
{
if(root.child[i]!=null)
{
char c=(char) (i+'a');
cur.append(c);
build_recursive(root.child[i], prefix, cur, ans);
cur.deleteCharAt(cur.length()-1);
}
}
}
}
Die Funktion Suchen die sortierte Liste aller Wörter gibt, die dem angegebenen Präfix teilen.
Gibt es auch eine bessere Datenstruktur, die ich dafür verwenden könnte?
Hinweis: Für die Arbeit Code, wenden Sie sich besser an codereview.stackexchangec.om. Sie sehen - SO ist dabei, mit bestimmten Problemen zu helfen, nicht mit "bitte lesen Sie meinen Code, kompilieren Sie es, führen Sie es aus und schlagen Sie vor, wie Sie es verbessern können" Art von Fragen. – GhostCat
Ich stimme für das Schließen dieser Frage als Off-Topic ab, da Frager Codeverbesserungsvorschläge sucht. – GhostCat
Seitennotiz: Bitte lesen Sie einige Java Coding Style Guides. Klassen beginnen mit Großbuchstaben; und kein "_" in Methodennamen. – GhostCat