Soluci贸n - Encuentra la Cadena Original I
Estrategia: Una sola iteraci贸n
Intuici贸n
Si un caracter en word aparece consecutivamente k veces (donde k > 1), y Alice comete un error, entonces
en la cadena original actual, este caracter podr铆a aparecer 1,2,...,k-1 veces. De manera que tenemos k-1 posibles variaciones.
Para el caso donde k = 1, Alice no cometi贸 ning煤n error, asi que hay 0 posibilidades, lo que es coherente con
la f贸rmula k - 1.
Por lo tanto, podemos recorrer la cadena una vez: dejemos que la posici贸n de recorrido actual sea l, y
supongamos que los caracteres de la palabra a partir de las posiciones [l, r] son iguales, mientras que el
car谩cter de la posici贸n r + 1 es diferente (o no existe). En este caso, aumentamos la respuesta en r - l, y
continuamos el recorrido desde la posici贸n r + 1.
Esto implica adem谩s que la contribuci贸n total del intervalo [l, r] a la respuesta es r - l. Podemos
interpretar esto como que la posici贸n l no contribuye a la respuesta, mientras que cada una de las posiciones [l+1,r] contribuye con 1. Por lo tanto, para cualquier posici贸n i de la cadena word (donde i > 0), if word[i - 1] == word[i], podemos aumentar la respuesta en 1.
Implementaci贸n
class Solution {
public:
int possibleStringCount(string word) {
int n = word.size(), ans = 1;
for (int i = 1; i < n; ++i) {
if (word[i - 1] == word[i]) {
++ans;
}
}
return ans;
}
}; Complexity analysis
Supongamos que n representa la longitud de la cadena word.
- Complejidad de tiempo:
O(n). - Complejidad de espacio:
O(1).