LeetCode - #125 Valider les chaînes palindromes

avant-propos

Notre communauté organisera successivement les solutions aux problèmes de l'algorithme Swift de Gu Yi ( Netflix Growth Hacker, auteur de "The Way of the iOS Interview", ACE Professional Fitness Coach. ) dans une version texte que tout le monde pourra apprendre et lire.

Nous avons mis à jour l'algorithme LeetCode à 124 problèmes jusqu'à présent, et nous conserverons l'heure et la progression de la mise à jour ( publié à 9h00 le lundi, mercredi et vendredi ). Il y aura une grande amélioration.

Si vous n'accumulez pas un petit pas, vous ne pouvez pas parcourir mille kilomètres, si vous n'accumulez pas un petit ruisseau, vous ne pouvez pas faire une rivière, la communauté Swift vous accompagne pour avancer. Si vous avez des suggestions et des commentaires, veuillez laisser un message à la fin de l'article, nous ferons de notre mieux pour répondre à vos besoins.

Niveau de difficulté : Facile

1. Descriptif

Étant donné une chaîne, vérifier qu'il s'agit d'un palindrome, en ne considérant que les caractères alphanumériques, en ignorant la casse des lettres.

Explication : Dans ce problème, nous définissons la chaîne vide comme un palindrome valide.

2. Exemple

Exemple 1

输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串

Exemple 2

输入: "race a car"
输出: false
解释:"raceacar" 不是回文串

Restrictions :

  • 1 <= s.length <= 2 * 10^5
  • chaîne scomposée de caractères ASCII

3. Réponses

class ValidPalindrome {
    func isPalindrome(_ s: String) -> Bool {
        var i = 0, j = s.count - 1
        let sChars = Array(s.lowercased())
        
        while i < j {
            while !sChars[i].isAlphanumeric && i < j {
                i += 1
            }
            
            while !sChars[j].isAlphanumeric && i < j {
                j -= 1
            }
            
            if sChars[i] != sChars[j] {
                return false
            } else {
                i += 1
                j -= 1
            }
        }
        
        return true
    }
}

extension Character {
    var isValid: Bool {
        return isLetter || isNumber
    }
}
  • Idée principale : pour chaque index de la première moitié de la chaîne, comparez les deux valeurs à l'index miroir. .
  • Complexité temporelle : O(n)
  • Complexité spatiale : O(n)

Référentiel pour la solution d'algorithme : LeetCode-Swift

Cliquez pour accéder à la pratique LeetCode

à propos de nous

Nous sommes maintenus conjointement par des passionnés de Swift. Nous partagerons le contenu technique centré sur le combat Swift, SwiftUI et la fondation Swift, et organiserons et collecterons également d'excellents matériaux d'apprentissage.

Je suppose que tu aimes

Origine juejin.im/post/7121608714314285093
conseillé
Classement