LeetCode 2451. Diferentes cadenas de matrices de diferencia

【LetMeFly】2451. Cadenas con diferentes matrices de diferencia

Enlace de tema de Leetcode: https://leetcode.cn/problems/odd-string-difference/

Dada una matriz de cadenas words , cada una de las cuales tiene la misma longitud, sea la longitud de todas las cadenas n .

Cada cadena  words[i] se puede convertir en una  matriz de enteros de diferencian - 1  de  longitud  , donde for   tiene   . Tenga en cuenta que la diferencia entre dos letras se define como la diferencia entre sus posiciones en el alfabeto   , es decir  ,  la posición de es   ,  la posición de es   y  la posición de es   . difference[i]0 <= j <= n - 2difference[i][j] = words[i][j+1] - words[i][j]'a'0'b'1'z'25

  • Digamos que  "acb" la matriz de enteros de diferencia de cadenas es  [2 - 0, 1 - 2] = [2, -1] .

words Todas las cadenas excepto una  tienen la misma matriz de enteros de diferencia. Necesitas encontrar esa cadena diferente.

Devuelva  diferentes cadenas en  una matriz de enteros de diferencia . words

 

Ejemplo 1:

Entrada: palabras = ["adc","wzy","abc"]
 Salida: "abc"
 Explicación: 
- La matriz de enteros de diferencia de "adc" es [3 - 0, 2 - 3] = [3, -1] . 
- La matriz de enteros de diferencia de "wzy" es [25 - 22, 24 - 25] = [3, -1]. 
- La matriz de enteros de diferencia de "abc" es [1 - 0, 2 - 1] = [1, 1]. 
La matriz distinta es [1, 1], por lo que devuelve la cadena correspondiente, "abc".

Ejemplo 2:

Entrada: palabras = ["aaa", "bob", "ccc", "ddd"]
 Salida: "bob"
 Explicación: excepto "bob", cuya matriz de enteros de diferencia es [13, -13], otras cadenas El entero de diferencia las matrices son todas [0, 0].

 

pista:

  • 3 <= words.length <= 100
  • n == words[i].length
  • 2 <= n <= 20
  • words[i] Contiene solo letras minúsculas en inglés.

Método uno: contar

Dos capas de bucles, la primera capa de bucles de 0 a n-1, enumera cada posición de una palabra.

La segunda capa recorre cada palabra en la lista de palabras, usa una tabla hash y cuenta la "diferencia" de cada palabra en la posición actual.

Recorra la lista de palabras nuevamente, si la "diferencia" en la posición actual de una palabra aparece solo una vez, devuelva esta palabra.

  • Complejidad del tiempo O (suma de letras) O (suma de letras)O ( suma de letras )
  • Complejidad espacial O ( 1 ) O(1)O ( 1 ) , hay como máximo dos valores clave en la tabla hash

código de CA

C++

class Solution {
    
    
public:
    string oddString(vector<string>& words) {
    
    
        int n = words[0].size();
        for (int j = 0; j < n - 1; j++) {
    
    
            unordered_map<int, int> ma;
            for (int i = 0; i < words.size(); i++) {
    
    
                ma[words[i][j + 1] - words[i][j]]++;
            }
            for (int i = 0; i < words.size(); i++) {
    
    
                if (ma[words[i][j + 1] - words[i][j]] == 1) {
    
    
                    return words[i];
                }
            }
        }
        return "";  // FAKE RETURN
    }
};

De hecho solo hay dos valores clave en la tabla hash como máximo, si se cambia a una tabla hash manual la eficiencia será mayor (aunque ya es del 100%, 99,43%)

Pitón

from typing import List
from collections import defaultdict

class Solution:
    def oddString(self, words: List[str]) -> str:
        n = len(words[0])
        for j in range(0, n - 1):
            ma = defaultdict(int)
            for word in words:
                ma[ord(word[j + 1]) - ord(word[j])] += 1
            for word in words:
                if ma[ord(word[j + 1]) - ord(word[j])] == 1:
                    return word
        return ""  # FAKE RETURN

Publique simultáneamente el artículo en CSDN, la originalidad no es fácil, adjunte el enlace al artículo original ~
Tisfy: https://letmefly.blog.csdn.net/article/details/130859334

Supongo que te gusta

Origin blog.csdn.net/Tisfy/article/details/130859334
Recomendado
Clasificación