Eliminar todos los duplicados adyacentes en la cadena
Haga clic para ingresar LeetCode
Dada una cadena de letras minúsculas S
, la operación de eliminación duplicada seleccionará dos letras adyacentes e idénticas y las eliminará.
En S
la aplicación de la eliminación duplicado repetida, no podemos continuar hasta que se eliminan.
Devuelve la cadena final después de completar todas las operaciones de deduplicación. La respuesta está garantizada para ser única.
Ejemplos
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
Pronto
1 <= S.length <= 20000
S
Se compone solo de letras minúsculas en inglés.
Ideas para resolver problemas
El método de procesamiento para el enésimo carácter (N> 1):
- Si S [N] == S [N + 1]
- S [N] y S [N + 1] son duplicados y deben borrarse
- Determine si S [N + 2] es igual a S [N-1]. Si son iguales, los duplicados continuarán borrándose; si no son iguales, continúe haciendo el mejor juicio de la cadena de caracteres N + 2
- Si S [N]! = S [N + 1]
- Continúa juzgando por el personaje N + 1
Necesita hacer un buen juicio sobre si N + 2 y N-1 cruzan la frontera
Implementación de la solución JAVA
Haga clic para ver otros métodos de resolución de problemas.
public String removeDuplicates(String S) {
if (S.length() <= 0) {
return "";
}
Deque deque = new ArrayDeque<>();
char[] charArray = S.toCharArray();
deque.addLast(charArray[0]);
for (int i = 1; i < charArray.length; i++) {
if (!deque.isEmpty() && deque.peekLast().equals(charArray[i])) {
deque.pollLast();
continue;
} else {
deque.addLast(charArray[i]);
}
}
StringBuilder result = new StringBuilder();
while (!deque.isEmpty()) {
result.append(deque.pollFirst());
}
return result.toString();
}