最近の就職の面接で、私は次の問題の解決策を提供するように頼まれました。
文字列s
(スペースなし)と辞書を指定して、文字列を構成する辞書内の単語を返します。
たとえば、s= peachpie, dic= {peach, pie}, result={peach, pie}
。
私はこの問題の決定のバリエーションを尋ねます:
s
辞書内の単語で構成できる場合はreturnyes
、それ以外の場合はreturnno
。
これに対する私の解決策は、バックトラック(Javaで書かれた)でした
public static boolean words(String s, Set<String> dictionary)
{
if ("".equals(s))
return true;
for (int i=0; i <= s.length(); i++)
{
String pre = prefix(s,i); // returns s[0..i-1]
String suf = suffix(s,i); // returns s[i..s.len]
if (dictionary.contains(pre) && words(suf, dictionary))
return true;
}
return false;
}
public static void main(String[] args) {
Set<String> dic = new HashSet<String>();
dic.add("peach");
dic.add("pie");
dic.add("1");
System.out.println(words("peachpie1", dic)); // true
System.out.println(words("peachpie2", dic)); // false
}
このソリューションの時間計算量はどれくらいですか?forループで再帰的に呼び出していますが、辞書にあるプレフィックスに対してのみ呼び出しています。
何か案は?