Comment comparer des chaînes en une seule modification en PHP

醉折花枝作酒筹
Libérer: 2023-03-11 10:22:01
avant
2288 Les gens l'ont consulté

Il existe trois opérations d'édition pour les chaînes : insérer un caractère, supprimer un caractère ou remplacer un caractère. Étant donné deux chaînes, écrivez une fonction pour déterminer si elles n’ont besoin que d’une (ou de zéro) modification. Jetons-y un coup d'œil aujourd'hui et vous pourrez vous y référer si vous en avez besoin.

Comment comparer des chaînes en une seule modification en PHP

Exemple 1 :

Entrée :

first = "pale"
second = "ple"
输出: True
Copier après la connexion

Exemple 2 :

输入: 
first = "pales"
second = "pal"
输出: False
Copier après la connexion

Idée de résolution de problèmes 1

Craquage par force brute, rechercher des caractères du début à la fin, si une première qualité est rencontré, comparez directement si les chaînes restantes des deux sont cohérentes. Si elles sont incohérentes, il faudra plus d'une opportunité de mise à jour pour maintenir la cohérence. Si les suivants sont égaux, seul ce bit est différent, et il peut être mis à jour une fois.

Implémentation du code :

class Solution {
    /** 
    * @param String $first 
    * @param String $second 
    * @return Boolean 
    */
    function oneEditAway($first, $second) {
        $fl = strlen($first);
        $sl = strlen($second);
        // 长度差 > 1 直接返回 false
        if (abs($fl - $sl) > 1) return false;
        // 为了方便接下来的判断,保持 $first 更长
        if ($sl > $fl) return $this->oneEditAway($second, $first);
        for ($i = 0; $i < $sl; $i++) {
            // 如果其中一位不一致,则比较剩余字符串是否一致
            if ($first[$i] != $second[$i]) {
                return substr($first, $i + 1) == substr($second, $fl == $sl ? $i + 1 : $i);
            }
        }
        return true;
    }}
Copier après la connexion

Pointeurs doubles

Recherchez la même chaîne du début à la fin et arrêtez-vous lorsque vous en rencontrez une différente, ce qui équivaut à obtenir la valeur d'index maximale de la même chaîne à partir de le début et le minimum à partir de la fin des valeurs d'index, si leurs différences de longueur sont < 1, alors une modification peut être égale.

Par exemple, si deux chaînes du professeur de blanchisseur sont parcourues depuis le début, la valeur d'index maximale de la même chaîne est 0, et parcourues depuis la fin, la valeur d'index minimale de la même chaîne est 1, 0, et elles le font ne s'arrête pas à la même position, alors il ne peut pas être modifié une seule fois et ce sera le même.

Implémentation du code :

class Solution {
    /** 
    * @param String $first 
    * @param String $second 
    * @return Boolean 
    */
    function oneEditAway($first, $second) {
        $fl = strlen($first);
        $sl = strlen($second);
        if (abs($fl - $sl) > 1) return false;
        $i = 0; $j = $fl - 1; $k = $sl - 1;
        // 正序获取两个字符串相同字符的最大 索引值
        while ($i < $fl && $i < $sl && $first[$i] == $second[$i]) {
            $i++;
        }
        // 倒序获取两个字符串相同字符的最小索引值
        while ($j >= 0 && $k >= 0 && $first[$j] == $second[$k]) {
            $j--;
            $k--;
        }
        // 比较倒序最小的和正序最大的索引值差距,如果最多编辑一次,则要求两个差值都不能大于 1
        return $j - $i < 1 && $k - $i < 1;
    }}
Copier après la connexion

Apprentissage recommandé : Tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:hxd.life
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal