Besoin de trouver la complexité Big O pour ma solution de ce LeetCode problem.Quelle est la grande complexité Oh de cet algorithme
Je ne peux pas estimer la complexité due aux suppressions répétées de la file d'attente lorsqu'un caractère répétitif est détecté, sans lequel il devrait être O (n) en raison de la seule boucle for qui traverse la chaîne.
Affichage l'essentiel du problème et ma solution pour votre référence:
d'une chaîne, trouver la longueur de la plus longue sans sous-chaîne caractères répéter.
Exemples:
Compte tenu "abcabcbb", la réponse est "abc", dont la longueur est 3.
Compte tenu "bbbbb", la réponse est "b", avec la longueur de 1.
Compte tenu « pwwkew », la réponse est « WKE », avec la longueur de 3. Notez que la réponse doit être une sous-chaîne, « pwke » est une suite et non une sous-chaîne .
Ma solution:
import java.util.Hashtable;
public class Solution {
public int lengthOfLongestSubstring(String s) {
Queue<Character> q = new LinkedList<Character>();
Hashtable<Character, Boolean> chars = new Hashtable<Character, Boolean>();
int maxLen = 0;
for (int i = 0; i < s.length(); i++)
{
char ch = s.charAt(i);
if (!chars.containsKey(ch))
{
q.add(ch);
chars.put(ch,true);
}
else
{
int len = q.size();
System.out.println(len);
while(q.peek()!=ch)
{
chars.remove(q.remove());
}
q.remove();
q.add(ch);
if (len > maxLen)
maxLen = len;
}
}
if (q.size() > maxLen)
return q.size();
return maxLen;
}
}
Mais il y a aussi une boucle while dans la boucle for qui pourrait être appelée plusieurs fois. Cela ne fera-t-il pas une différence? –
Oups Je regardais la solution du site et non la vôtre, je ne l'ai pas vu en boucle. Dans ce cas, pourriez-vous déterminer quel est le pire cas pour la boucle while? Existe-t-il un exemple où vous pourriez avoir chaque if/else aller à la clause else et ensuite faire la boucle while n fois? – Developer