static int wing=[]()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return ;
}(); class Solution
{
public:
string mostCommonWord(string paragraph, vector<string>& banned)
{
unordered_map<string,int> simap;
for(string s:banned)
simap[s]=-;
int beg=,flag=,max=;
paragraph.push_back(' ');
string res;
int sz=paragraph.length();
for(int i=;i<sz;i++)
{
if(isalpha(paragraph[i]))
paragraph[i]=tolower(paragraph[i]);
else if(paragraph[i]!=' ')
{
flag=;
continue;
}
else
{
string cur=paragraph.substr(beg,i-flag-beg);
simap[cur]++;
beg=i+;
flag=;
if(simap[cur]>max)
{
res=cur;
max=simap[cur];
}
}
}
return res;
}
};

以空格为标志,进行操作。

先把禁止序列扫进map,并将对应的字符串计数器置为-1000,由于段落最长就为1000,这样在扫描段落之后,禁止序列的字符串计数器就不可能为正数,就不会影响到非禁止序列高频单词的筛选。

观察段落序列可以发现,除了首个单词,每个单词前面都是空格,所以我们以空格为判定依据。

遇到字母时,操作只将字母转为小写

遇到非空格非字母,即遇到标点符号时,将标志位置为1,表示在下一个空格前有一个标点符号

遇到空格时,i 代表了空格的下标,beg代表了当前单词序列开始下标,即当前单词的第一个字母下标,用substr将单词提取出来,提取长度为 i-flag-1-beg+1=i-flag-beg

提取出来之后,将单词放入map,并增加计数器,然后比较计数器的值和最大值,进行相应操作。

操作之后,要将beg置为新单词的第一个字母,即i+1,将flag标志置为0。

这里还要注意一点,最后一个单词是以句号结尾的,末尾没有空格,循环不会操作最后一个单词,所以,为了让操作进行完整,在循环前,在段落后面补充了一个空格。

这个题用到了一点技巧性的东西,活用标志位,补充原字符串。

819. Most Common Word的更多相关文章

  1. 【Leetcode_easy】819. Most Common Word

    problem 819. Most Common Word solution: class Solution { public: string mostCommonWord(string paragr ...

  2. LeetCode 819. Most Common Word (最常见的单词)

    Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...

  3. LeetCode 819. Most Common Word

    原题链接在这里:https://leetcode.com/problems/most-common-word/description/ 题目: Given a paragraph and a list ...

  4. 819. Most Common Word 统计高频词(暂未被禁止)

    [抄题]: Given a paragraph and a list of banned words, return the most frequent word that is not in the ...

  5. 【LeetCode】819. Most Common Word 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 正则+统计 日期 题目地址:https://leet ...

  6. leetcode Most Common Word——就是在考察自己实现split

    819. Most Common Word Given a paragraph and a list of banned words, return the most frequent word th ...

  7. [Swift]LeetCode819. 最常见的单词 | Most Common Word

    Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...

  8. [LeetCode] Most Common Word 最常见的单词

    Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...

  9. 最常出现的字符串 Most Common Word

    2018-10-26 00:32:05 问题描述: 问题求解: 方法一.Trie 最长出现的字符串,最容易想到的解法就是Trie树了,于是首先使用Trie树进行了实现,代码量有点大,当然了是可以A掉的 ...

随机推荐

  1. 条件编译ifndef、ifdef、endif

    1.条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2.  ...

  2. 二维背包 hdu2159

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 题目里面有两个限制条件,忍耐度和杀怪数量,所以可以用一个二维数组dp[i][j]来表示在消耗忍耐 ...

  3. c++ sizeof,strlen, length

    #include <map>#include <iostream>#include <algorithm>#include <functional>#i ...

  4. Python: 定时器(Timer)简单实现

    项目分析中发现有网站下载过程中需要发送心跳指令,复习下定时器,其与javascript中实现方法类似. 其原理为执行函数中置定时函数Timer(),递归调用自己,看来实现方法比较拙劣. 假定1秒触发一 ...

  5. 解决com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭

    com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭. at com.microsoft.sqlserver.jdbc.SQLServerEx ...

  6. gradle项目与maven项目互转

    maven to gradle 在maven项目根目录下执行命令: gradle init --type pom 当然你得先下载Gradle,配置完环境变量. gradle to maven grad ...

  7. Nginx+Tomcat 实现动态分离,负载均衡

    什么是动静分离 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时 ...

  8. Java_9 面向对象

    1.面向对象思想 面向过程的思想:自己做什么 面向对象的思想:自己找谁做,即不断地创造对象.使用对象.指挥对象做事情.万物皆对象. 面对对象的特征:封装.继承.多态. 2.java中基本单元类 成员变 ...

  9. 编程,将data段中的字符串转化成大写

    assume cs:code data segment db 'conversation' data ends code segment start: mov ax,data mov ds,ax ca ...

  10. 浅谈XListView的使用

    XListView是github上的开源第三方控件 内部封装好的一个类XListView 其内部包含XListViewFooter XListViewHeader 两个自定义类(控件)如此实现上拉加载 ...