每日一题——最常见的单词

简介: 每日一题——最常见的单词

819. 最常见的单词

题目描述:

给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。

返回出现次数最多,同时不在禁用列表中的单词。

题目保证至少有一个词不在禁用列表中,而且答案唯一。

禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。

[示例]:

输入:

 paragraph = “Bob hit a ball, the hit BALL flew far after it was hit.”

 banned = [“hit”]

输出: “ball”

解释:

 “hit” 出现了3次,但它是一个禁用的单词。

 “ball” 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。

 注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 “ball,”),

 "hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。

题解:

注意:

不光要考虑ball,,这种情况,他还会出现a,b,c,d. 这种情况

func mostCommonWord(paragraph string, banned []string) string {
  // 将banned存入map,便于后续判断当前单词是否被ban
  bannedMap :=make(map[string]int)
  for _, s := range banned {
    bannedMap[s] = 0
  }
  // 转小写
  paragraph = strings.ToLower(paragraph)
  // 段落单词切片,除去标点符号
  var wordSlice []string
  // 单个单词的字母切片
  var cSlice []rune
  for i, c := range paragraph {
    if c >= 'a' && c <= 'z' {
      cSlice = append(cSlice, c)
      // 遍历到了最后
      if i==len(paragraph)-1 {
        wordSlice = append(wordSlice, string(cSlice))
        break
      }
    } else { // 遇到非字母字符,将上面的rune切片转成字符串存入单词切片
      if string(cSlice) == " "||len(string(cSlice))==0 {
        cSlice = []rune{}
        continue
      } else {
        wordSlice = append(wordSlice, string(cSlice))
        cSlice = []rune{}
        continue
      }
    }
  }
  // 已经出现过的单词的次数
  already := make(map[string]int)
  max := 0
  result := ""
  for _, word := range wordSlice {
    // 如果被ban 直接下一个单词
    if _,ok:=bannedMap[word];ok==true {
      continue
    }
    // 如果不存在 加入map 次数初始化为1
    if _, ok := already[word]; ok == false {
      already[word] = 1
    }else {
      already[word]++
    }
    if already[word] > max {
      max = already[word]
      result = word
    }
  }
  return result
}
相关文章
|
机器学习/深度学习 人工智能 搜索推荐
AIGC工具——文心一格
【1月更文挑战第12天】AIGC工具——文心一格
1055 3
AIGC工具——文心一格
小技巧 - 微信零钱转出免手续费方法(利用零钱通转出)
小技巧 - 微信零钱转出免手续费方法(利用零钱通转出)
4085 0
小技巧 - 微信零钱转出免手续费方法(利用零钱通转出)
|
5月前
|
人工智能 自然语言处理 IDE
【HarmonyOS 5】鸿蒙CodeGenie AI辅助编程工具详解
1、CodeGenie是什么? CodeGenie (代码精灵)作为鸿蒙DevEco IDE自带的AI辅助编码工具。
255 0
|
边缘计算 物联网 5G
软件定义网络(SDN)的未来趋势:重塑网络架构,引领技术创新
【8月更文挑战第20天】软件定义网络(SDN)作为新兴的网络技术,正在逐步重塑网络架构,引领技术创新。随着5G、人工智能、边缘计算等技术的不断发展,SDN将展现出更加广阔的应用前景和市场潜力。未来,SDN有望成为主流网络技术,并在各行各业推动数字化转型。让我们共同期待SDN技术带来的更加智能、安全和高效的网络体验。
|
Java Python
gc模块的set_threshold函数
gc模块的set_threshold函数
344 1
|
分布式计算 Java Apache
Apache Spark Streaming技术深度解析
【9月更文挑战第4天】Apache Spark Streaming是Apache Spark生态系统中用于处理实时数据流的一个重要组件。它将输入数据分成小批次(micro-batch),然后利用Spark的批处理引擎进行处理,从而结合了批处理和流处理的优点。这种处理方式使得Spark Streaming既能够保持高吞吐量,又能够处理实时数据流。
267 0
|
网络安全
2024年---蓝桥杯网络安全赛道部分WP
2024年---蓝桥杯网络安全赛道部分WP
|
小程序
【微信小程序】-- WXSS 模板样式- 全局样式和局部样式(十四)
【微信小程序】-- WXSS 模板样式- 全局样式和局部样式(十四)
|
SQL 缓存 NoSQL
社交系统中用户好友关系数据库设计
社交系统中用户好友关系数据库设计
1472 0
|
存储 弹性计算 固态存储
《阿里云存储手册》——块存储EBS
《阿里云存储手册》——块存储EBS
992 0