Lituo Brush pregunta 49 agrupación de anagramas

Descripción de la pregunta

Se le proporciona una serie de cadenas y se le pide que combine los anagramas. La lista de resultados se puede devolver en cualquier orden.

Un anagrama es una palabra nueva que se obtiene reordenando todas las letras de la palabra original.

Ejemplo 1:

Entrada: strs = ["eat", "tea", "bronceado", "ate", "nat", "bat"] Salida: [["bat"],["nat","tan"],[
" comió", "comió", "té"]]
Ejemplo 2:

Entrada: strs = [""]
Salida: [[""]]
Ejemplo 3:

Entrada: strs = ["a"]
Salida: [["a"]]

pista:

1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] Contiene solo letras minúsculas
Temas relacionados matriz
Tabla
hash Clasificación
de cadenas

Código

Implementación básica

package leetcode.editor.repractice;


import java.util.*;

public class Q49 {
    
    
    public static void main(String[] args) {
    
    
        Solution solution = new Q49().new Solution();
        String[] strs = {
    
    "eat", "tea", "tan", "ate", "nat", "bat"};
        System.out.println(solution.groupAnagrams1(strs));
    }


    class Solution {
    
    
        public List<List<String>> groupAnagrams1(String[] strs) {
    
    
            Map<String, List<String>> map = new HashMap<String, List<String>>(); //map记录字母相同对应的异位词,用List作为值
            for(String str : strs){
    
    
                char[] array = str.toCharArray(); //字符串转数组方便后续排序
                Arrays.sort(array);               //异位词排序后返回的都是一样的,eat,tea排序后都为aet
                String key = new String(array);   //key表示异位词排序后的值,比如 aet
                List<String> list= map.getOrDefault(key,new ArrayList<String>()); //getOrDefault若存在key返回对应的值(List),不存在则返回一个空List
                list.add(str);                     //key存不在都需要记录strs每一个字符串,然后加入到map中。比如 aet已经有了 tea就加aet的list后面。没有就新建一个list,当前的是list第一个元素
                map.put(key,list);                 //将list放入对应的key
            }
            return new ArrayList<> (map.values()); //返回一个ArrayList,值为map各个key对应的list


        }
    }
}

Optimizar código

Retroceso de conocimientos básicos

Insertar descripción de la imagen aquí
El marco de colección de Java incluye principalmente dos tipos de contenedores, uno es Colección, que almacena una colección de elementos, y el otro es Mapa, que almacena asignaciones de pares clave/valor. La interfaz de Colección tiene tres subtipos, Lista, Conjunto y Cola, seguidos de algunas clases abstractas y, finalmente, clases de implementación concretas. Las más utilizadas incluyen ArrayList, LinkedList, HashSet, LinkedHashSet, HashMap, LinkedHashMap, etc.

El marco de colecciones es un marco unificado para representar y manipular colecciones. Todos los marcos de colección contienen el siguiente contenido:

Interfaz: es un tipo de datos abstracto que representa una colección. Por ejemplo Colección, Lista, Conjunto, Mapa, etc. La razón por la que se definen varias interfaces es para operar los objetos de la colección de diferentes maneras.

Implementación (clase): es la implementación específica de la interfaz de colección. Básicamente, son estructuras de datos reutilizables como: ArrayList, LinkedList, HashSet, HashMap.

Algoritmo: son algunos cálculos útiles realizados por métodos en objetos que implementan la interfaz de colección, como la búsqueda y la clasificación. Estos algoritmos implementan polimorfismo porque el mismo método puede tener diferentes implementaciones en interfaces similares.

Además de las colecciones, el marco también define varias interfaces y clases de mapas. Un mapa almacena pares clave/valor. Aunque los mapas no son colecciones, están completamente integrados en las colecciones.

recolectar

La clase ArrayList es una matriz que se puede modificar dinámicamente, la diferencia con las matrices ordinarias es que no tiene límite de tamaño fijo y podemos agregar o eliminar elementos.

ArrayList hereda AbstractList e implementa la interfaz List.
Insertar descripción de la imagen aquí

referencia

https://www.runoob.com/java/java-collections.html
Tutorial para principiantes

[Agrupación de anagramas del capítulo 49 de Leetcode-string] https://www.bilibili.com/video/BV1fW4y1t7pq/?share_source=copy_web&vd_source=fe6c23f6f1353ed1eff5d5e866171572

Supongo que te gusta

Origin blog.csdn.net/qq_41398619/article/details/132683681
Recomendado
Clasificación