LeetCode-1750. Longueur minimale de la chaîne après suppression ... [Moyenne] -Analyse et code (Java)

LeetCode-1750. Longueur minimale de la chaîne après suppression des extrémités similaires [Longueur minimale de la chaîne après suppression des extrémités similaires] [Moyenne] -Analyse et code [Java]

1. Sujet

Étant donné une chaîne s qui ne contient que les caractères «a», «b» et «c», vous pouvez effectuer l'opération suivante (5 étapes) autant de fois que nécessaire:

  • Choisissez un préfixe non vide pour la chaîne s. Tous les caractères de ce préfixe sont identiques.
  • Sélectionnez un suffixe non vide de la chaîne s, tous les caractères de ce suffixe sont identiques.
  • Le préfixe et le suffixe ne doivent se chevaucher nulle part dans la chaîne.
  • Tous les caractères contenus dans le préfixe et le suffixe doivent être identiques.
  • Supprimez le préfixe et le suffixe en même temps.

Veuillez renvoyer la longueur la plus courte qui puisse être obtenue après avoir effectué les opérations ci-dessus sur la chaîne un nombre de fois quelconque (peut-être 0 fois).

Exemple 1:

输入:s = "ca"
输出:2
解释:你没法删除任何一个字符,所以字符串长度仍然保持不变。

Exemple 2:

输入:s = "cabaabac"
输出:0
解释:最优操作序列为:
- 选择前缀 "c" 和后缀 "c" 并删除它们,得到 s = "abaaba" 。
- 选择前缀 "a" 和后缀 "a" 并删除它们,得到 s = "baab" 。
- 选择前缀 "b" 和后缀 "b" 并删除它们,得到 s = "aa" 。
- 选择前缀 "a" 和后缀 "a" 并删除它们,得到 s = "" 。

Exemple 3:

输入:s = "aabccabba"
输出:3
解释:最优操作序列为:
- 选择前缀 "aa" 和后缀 "a" 并删除它们,得到 s = "bccabb" 。
- 选择前缀 "b" 和后缀 "bb" 并删除它们,得到 s = "cca" 。

rapide:

  • 1 <= s.longueur <= 105
  • s contient uniquement les caractères "a", "b" et "c".

Source: LeetCode
Lien: https://leetcode-cn.com/problems/minimum-length-of-string-after-deleting-similar-ends
Copyright est la propriété de LeetCode . Pour les réimpressions commerciales, veuillez contacter l'autorisation officielle. Pour les réimpressions non commerciales, veuillez indiquer la source.

Deux, analyse et code

1. Double pointeur

(1) Penser

Deux pointeurs sont conçus au début et à la fin de la chaîne, et les mêmes opérations de suppression de pré et de suffixe sont effectuées dans l'ordre. La distance entre les deux derniers pointeurs est la plus courte longueur de la chaîne renvoyée.

(2) Code

class Solution {
    
    
    public int minimumLength(String s) {
    
    
        int len = s.length(), l = 0, r = len - 1;
        char[] c = s.toCharArray();
        while (l < r && c[l] == c[r]) {
    
    
            while (l + 1 < r && c[l] == c[l + 1])
                l++;
            while (l < r - 1 && c[r] == c[r - 1])
                r--;
            l++;
            r--;
        }
        return r - l + 1;
    }
}

(3. Résultats

Temps d'exécution: 5 ms, battant 48,18% des utilisateurs
dans toutes les soumissions Java ; consommation de mémoire: 39,1 Mo, battant 55,68% des utilisateurs dans toutes les soumissions Java.

Trois, autre

Rien.

Je suppose que tu aimes

Origine blog.csdn.net/zml66666/article/details/114005092
conseillé
Classement