[H hash] lc76. Subcadena de cobertura mínima (doble puntero + hash)

Directorio de artículos

1. Fuente del tema

Enlace: 76. Subcadena de cobertura mínima

2. Análisis de temas

Prefacio:

Al principio escribió cnt == ht.size(), profundizó aún más la unordered_mapcomprensión. Independientemente de si está asignado o no, ¡se realizará la operación de inserción! ! Asegúrese de tener esto en cuenta.

La idea sigue siendo muy convencional, aplicando la idea de doble puntero de la tercera pregunta y una pequeña parte de la pregunta número 30 para determinar rápidamente si se cubren los caracteres de intervalo . Dos ideas muy importantes.

Inserte la descripción de la imagen aquí

Código:

class Solution {
    
    
public:
    string minWindow(string s, string t) {
    
    
        unordered_map<char, int> hs, ht;
        for (auto e : t) ht[e] ++ ;
        
        string res;
        int cnt = 0;
        for (int i = 0, j = 0; i < s.size(); i ++ ) {
    
    
            hs[s[i]] ++ ;// 先加入哈希表中,若加入后该字符小于等于有效字符的个数则说明该操作有效
            if (hs[s[i]] <= ht[s[i]]) cnt ++ ;	// 等号不能丢...一开始想错了

            while (hs[s[j]] > ht[s[j]]) hs[s[j ++ ]] -- ;
            if (cnt == t.size()) {
    
    
                if (i - j + 1 < res.size() || res.empty())
                    res = s.substr(j, i - j + 1);
            }
        }
        return res;
    }
};

Supongo que te gusta

Origin blog.csdn.net/yl_puyu/article/details/112000160
Recomendado
Clasificación