Voici une question de l'algorithme:Quelle est la complexité temporelle de cet algorithme récursif
d'une chaîne s et un dictionnaire de mots DICT, ajouter des espaces en s à construire une phrase où chaque mot est un dictionnaire valide mot.
Renvoyer toutes ces phrases possibles. Par exemple, étant donné s = "catsanddog", dict = ["chat", "chats", "et", "sable", "chien"].
Une solution est ["chats et chiens", "chat chien de sable"].
La solution est la suivante, mais j'ai eu du mal à déterminer la complexité temporelle de cette solution. Quelqu'un peut-il me donner quelques indices, surtout si les intervieweurs ont demandé cette fois-ci de la complexité dans les entretiens, y a-t-il un moyen rapide de le trouver sans trop de maths?
public class Solution {
Map<String,List<String>> map = new HashMap();
public List<String> wordBreak(String s, Set<String> wordDict) {
List<String> res = new ArrayList<String>();
if(s == null || s.length() == 0) {
return res;
}
if(map.containsKey(s)) {
return map.get(s);
}
if(wordDict.contains(s)) {
res.add(s);
}
for(int i = 1 ; i < s.length() ; i++) {
String t = s.substring(i);
if(wordDict.contains(t)) {
List<String> temp = wordBreak(s.substring(0 , i) , wordDict);
if(temp.size() != 0) {
for(int j = 0 ; j < temp.size() ; j++) {
res.add(temp.get(j) + " " + t);
}
}
}
}
map.put(s , res);
return res;
}
}
Le dictionnaire peut-il contenir des chaînes qui ne sont pas des sous-chaînes de la chaîne donnée? – PEF
@PEF Oui, ça peut le faire – Leo