Premier caractère unique dans une chaîne de caractères

Problème : Étant donné une chaîne de caractères, trouver le premier caractère non répétitif et retourner son indice. Si aucun n'existe, retourner -1.

Exemples :

  • Pour s = "leetcode", la sortie est 0
  • Pour s = "loveleetcode", la sortie est 2

Contrainte : La chaîne ne contient que des lettres minuscules.

Solution 1 : Approche naïve avec boucle imbriquée

Cette méthode parcourt chaque caractère et compte ses occurrences en utilisant une boucle interne, ce qui est inefficace mais simple à comprendre.

class Solution:
    def premierCaractereUnique(self, chaine: str) -> int:
        longueur = len(chaine)
        for idx in range(longueur):
            car = chaine[idx]
            occurrences = 0
            for c in chaine:
                if c == car:
                    occurrences += 1
            if occurrences == 1:
                return idx
        return -1

Solution 2 : Utilisation de find et rfind

Cette méthode vérifie si un caractère apparaît une seule fois en comparant sa première et dernière occurrence à l'aide des fonctions find et rfind.

class Solution:
    def premierCaractereUnique(self, chaine: str) -> int:
        for pos in range(len(chaine)):
            premiere = chaine.find(chaine[pos])
            derniere = chaine.rfind(chaine[pos])
            if premiere == derniere:
                return pos
        return -1

Solution 3 : Approche pythonique avec découpage

Cette approche vérifie si un caractère n'apparaît ni dans la partie gauche ni dans la partie droite de la chaîne par rapport à sa position actuelle.

class Solution:
    def premierCaractereUnique(self, chaine: str) -> int:
        longueur = len(chaine)
        if longueur == 1:
            return 0
        for idx in range(longueur):
            caractere = chaine[idx]
            if caractere not in chaine[:idx] and caractere not in chaine[idx+1:]:
                return idx
        return -1

Solution 4 : Algorithme de hachage avec compteur

Cette méthode utilise un dictionnaire pour compter les occurrences de chaque caractère, puis parcourt la chaîne pour trouver le premier avec un compteur égal à 1.

class Solution:
    def premierCaractereUnique(self, chaine: str) -> int:
        from collections import Counter
        compteur = Counter(chaine)
        for idx, car in enumerate(chaine):
            if compteur[car] == 1:
                return idx
        return -1

Étiquettes: Python algorithmes chaînes de caractères dictionnaire compteur

Publié le 12 juillet à 19h37