Usando split para resolver el problema de la "palabra más común"

15. Las palabras más comunes

15.1 Requisitos para el título

  Dado un párrafo (paragraph) y una lista de palabras prohibidas (banned). Devuelve la palabra con el mayor número de ocurrencias mientras no está en la lista prohibida.

  Las preguntas aseguran que al menos una palabra no esté en la lista prohibida y que la respuesta sea única.

  Las palabras de la lista prohibida se escriben en minúsculas sin puntuación. Las palabras en los párrafos no distinguen entre mayúsculas y minúsculas. Las respuestas son todas en minúsculas.

示例:
输入: 
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
输出: "ball"
解释: 
"hit" 出现了3次,但它是一个禁用的单词。
"ball" 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。 
注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 "ball,"), 
"hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。

提示:
1 <= 段落长度 <= 1000
0 <= 禁用单词个数 <= 100
1 <= 禁用单词长度 <= 10
答案是唯一的, 且都是小写字母 (即使在 paragraph 里是大写的,即使是一些特定的名词,答案都是小写的。)
paragraph 只包含字母、空格和下列标点符号!?',;.
不存在没有连字符或者带有连字符的单词。
单词里只包含字母,不会出现省略号或者其他标点符号。

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/most-common-word

15.2 Ideas para resolver problemas

  Primero elimine los símbolos en la cadena, luego cuente la cantidad de ocurrencias de las palabras en la cadena, luego elimine las palabras prohibidas y emita las palabras con la cantidad de ocurrencias del mapa después de eliminar las palabras prohibidas.

15.3 Algoritmos

//将字符串中的符号去掉
String [] str = paragraph.split(" |\\!|\\?|'|\\;|\\.|,");
Map<String,Integer> map = new HashMap<>();
//统计字符串中的单词出现的次数
for (int i = 0; i < str.length; i++) {
    
    
    //将数组b中的空格去掉
    if (str[i].length()==0){
    
    
        continue;
    }
    //将字母转换成小写字母
    str[i] = str[i].toLowerCase();
    //给map赋值,str[i]为map中的key,value则为依次递增
    //getOrDefault()函数的作用是在map中得到传入key的value,如果得不到也就是value如果为空,则返回传入的参数的值
    //在这里的话,如果value为空,初始的value则为1;如果value不为空,则返回key相对应的value再加一
    map.put(str[i],map.getOrDefault(str[i],0)+1);
}
//将ban中禁用的单词在map中去掉
for(int i=0;i<banned.length;i++){
    
    
    map.remove(banned[i]);
}
String ans=" ";
//取出map中的数比较并替换
for(String s:map.keySet()){
    
    
    //将map中字符串s的value与getOrDefault(比较成功,递增)进行比较
    if(map.get(s)>map.getOrDefault(ans,0)){
    
    
        ans=s;
    }
}
return ans;

Supongo que te gusta

Origin blog.csdn.net/qq_52916408/article/details/124240924
Recomendado
Clasificación