Java aplicación LeetCode 609 encontrar archivos duplicados en el sistema de lectura (+ violencia comprensión Dafa)

609. encontrar archivos duplicados en el sistema

Dada una lista de la información del directorio, incluyendo la ruta del directorio y todos los ficheros con el contenido de ese directorio, es necesario encontrar todos los grupos de destino de los ficheros duplicado del sistema de archivos. Un duplicado de los archivos incluye al menos dos archivos que tienen exactamente el mismo contenido.

Una lista de cadenas de entrada la información del directorio individual tiene el siguiente formato:

“/ / / ... / dm f1.txt (f1_content) f2.txt raíz d1 d2 (f2_content) ... fn.txt (fn_content)”

Esto significa que hay n archivo (f1.txt, f2.txt ... fn.txt contenidos son f1_content, f2_content ... fn_content) en el directorio raíz / D1 / D2 / ... / dm. Nota: n> = 1 y m> = 0. Si m = 0, indica que el directorio es el directorio raíz.

La salida es una lista de grupo de ruta archivos duplicados. Para cada grupo, que contiene toda la ruta del archivo con el mismo contenido. La ruta del archivo es una cadena tiene el siguiente formato:

“Ruta_directorio / file_name.txt”

Ejemplo 1:

输入:
[ “raíz / a 1.txt (abcd) 2.txt (EFGH)”, “raíz / c 3.txt (abcd)”, “raíz / c / d 4.txt (EFGH)”, “raíz 4 .txt (EFGH)”]
输出:
[[‘raíz / a / 2.txt’,‘raíz / c / d / 4.txt’,‘raíz / 4.txt’], [“raíz / a / 1. txt”,‘root / c / 3.txt’]]

nota:

El resultado final no tiene por qué orden.
Se puede suponer que dentro de los nombres de directorio, nombre de archivo y archivos contenidos sólo letras y números, y la longitud de los contenidos del archivo en el rango [1,50].
Un número dado de archivos en los [1,20000] rangos.
No se puede asumir que los archivos o directorios que comparten el mismo nombre en el mismo directorio.
Se puede suponer que cada información del directorio dado representa un directorio único. La información de la ruta de directorios y archivos, separadas por un espacio.

Seguimiento allá de la competencia:

Suponga que tiene un sistema de archivo real, ¿Cómo va a buscar archivos? Buscar amplitud o anchura de la búsqueda?
Si el contenido del archivo es muy grande (nivel E), ¿cómo va a modificar su solución?
Si sólo se puede leer archivos de 1 kb, se cómo modificar la solución?
La complejidad del tiempo de la solución modificada es ¿cuánto? Lo que es la parte que consume más tiempo de lo que consumen memoria y parte es? Cómo optimizar?
Cómo asegurarse de que encontrar archivos duplicados no es una falsa alarma?

class Solution {
    public List<List<String>> findDuplicate(String[] paths) {
 List<List<String>> list = new ArrayList<List<String>>();
		Map<String, Integer> map = new HashMap<String, Integer>();
		int index = 0;
		for (String str : paths) {
			String[] strs = str.split(" ");
			for (int i = 1; i < strs.length; i++) {
				String key = strs[i].substring(strs[i].indexOf("(") + 1, strs[i].indexOf(")"));
				if (!map.containsKey(key)) {
					map.put(key, index++);
					list.add(new ArrayList<String>());
				}
				list.get(map.get(key)).add(strs[0] + "/" + strs[i].substring(0, strs[i].indexOf("(")));
			}
		}
		for (int i = list.size() - 1; i >= 0; i--) {
			if (list.get(i).size() < 2) 
				list.remove(i);
		}
		return list;
    }
}
Liberadas 1675 artículos originales · ganado elogios 20000 + · vistas 3,18 millones +

Supongo que te gusta

Origin blog.csdn.net/a1439775520/article/details/105200398
Recomendado
Clasificación