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)
.