力扣热题:最常见的单词
开篇
今天是备战蓝桥杯的第17天,今天到现在刷了5道算法题,分享一道很不错的题目。
题目链接:819.最常见的单词
题目描述
代码思路
根据题目要求,我的思路是:建立一个哈希表,把每个单词及其出现的次数记录下来,最后遍历哈希表,返回出现次数最多的单词。思路并不难,难的是代码的实现。
代码纯享版
class Solution {public String mostCommonWord(String paragraph, String[] banned) {paragraph = paragraph.toLowerCase();Map<String, Integer> map = new HashMap<>();StringBuffer str = new StringBuffer("");int left = 0;while(left < paragraph.length()){char s = paragraph.charAt(left);if(s >= 'a' && s <= 'z'){str.append("" + s);}else if(str.length() > 0){if(map.containsKey(str.toString())){map.put(str.toString(),map.get(str.toString()) + 1);}else map.put(str.toString(), 1);str.delete(0, str.length());}left++;if(left == paragraph.length() && s >= 'a' && s <= 'z'){if(str.length() > 0){if(map.containsKey(str.toString())){map.put(str.toString(),map.get(str.toString()) + 1);}else map.put(str.toString(), 1);str.delete(0, str.length());}}}for(int i = 0; i < banned.length; i++){if(map.containsKey(banned[i])){map.remove(banned[i]);}}int max = 0;String maxstr = "";for(Map.Entry<String, Integer> entry : map.entrySet()){if(entry.getValue() > max){max = entry.getValue();maxstr = entry.getKey();}}return maxstr;}
}
代码逐行解析版
class Solution {public String mostCommonWord(String paragraph, String[] banned) {paragraph = paragraph.toLowerCase(); //把段落中的字符全部变成小写Map<String, Integer> map = new HashMap<>(); //创建哈希表,保存单词及其次数StringBuffer str = new StringBuffer(""); //创建字符串,来暂时保存单词int left = 0; //扫描段落的指针while(left < paragraph.length()){ //循环条件,指针小于段落长度char s = paragraph.charAt(left); //提取字符判断if(s >= 'a' && s <= 'z'){ //符合要求,放入字符串中str.append("" + s);}else if(str.length() > 0){ //不符合要求,证明是空格,那之前保存的部分就是一个完整的单词if(map.containsKey(str.toString())){ //if-else都是把单词存入哈希表map.put(str.toString(),map.get(str.toString()) + 1);}else map.put(str.toString(), 1);str.delete(0, str.length()); //删掉字符串中的单词,方便下一个单词的保存}left++;//指针右移if(left == paragraph.length() && s >= 'a' && s <= 'z'){ //单独判断最后一个字符的情况,如果最后一个字符是字母,证明存在单词,复制粘贴上面哈希表保存单词的方法即可if(str.length() > 0){if(map.containsKey(str.toString())){map.put(str.toString(),map.get(str.toString()) + 1);}else map.put(str.toString(), 1);str.delete(0, str.length());}}}for(int i = 0; i < banned.length; i++){ //若哈希表中有禁用的单词,则删掉if(map.containsKey(banned[i])){map.remove(banned[i]);}}int max = 0; //max统计最多次出现的次数String maxstr = ""; //maxstr记录最多次出现的单词for(Map.Entry<String, Integer> entry : map.entrySet()){ //利用遍历哈希表的方法遍历if(entry.getValue() > max){ //哈希表的值如果大于maxmax = entry.getValue(); //更新max和maxstrmaxstr = entry.getKey();}}return maxstr;//返回最常见的单词}
}
结语
如果这道题的分享对您有所帮助,点个关注,我会每天更新力扣题目的分享,与大家一起向前迈进。