2017百度校园招聘编程题
来源:互联网 发布:软件开发毕业设计题目 编辑:程序博客网 时间:2024/06/05 05:43
题目大概为输入n个敏感词汇和一个文本串,在文本串中出现敏感词汇的地方用'*'替代掉,输出替换后的文本串。
思路:直接kmp匹配出现敏感词的地方,用一个中间数组标记。唯一的陷阱就是不区分大小写,所以用kmp判断两个字符相等的注意下:
// 替换敏感词汇#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;char T[10006],P[106][106],f[106];int vis[10006];bool cmp(char& a,char& b){ // no case char if(a==b || abs(int(a-b))==32) return true; else return false;}void getFaid(char* p){int m=strlen(p);f[0]=f[1]=0;for(int i=1;i<m;i++){int j=f[i];while(j && !cmp(p[j],p[i])) j=f[j];f[i+1]=cmp(p[j],p[i])?j+1:0;}}void kmp(char *t,char* p){int n=strlen(t);int m=strlen(p);getFaid(p);int j=0;for(int i=0;i<n;i++){while(j && !cmp(t[i],p[j])) j=f[j];if(cmp(p[j],t[i])) j++;if(j==m){/*cout<<i-m+1<<" "<<i<<endl;*/for(int k=i-m+1;k<=i;k++) vis[k]=1;j=0;}}}int main(){int n;cin>>n;for(int i=0;i<n;i++){ cin>>P[i];}getchar();cin.getline(T,10000);memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){ kmp(T,P[i]);} for(int i=0;T[i];i++){ if(vis[i]) cout<<'*'; else cout<<T[i]; } cout<<endl;return 0;}
0 0
- 2017百度校园招聘编程题
- 2015年百度校园招聘8道编程题
- 百度2013校园招聘题
- 百度2016校园招聘编程题解析
- 滴滴2017校园招聘在线编程题
- 阿里校园招聘2017编程题
- 美团2017校园招聘编程题
- 2017校园招聘 携程编程题
- 小米2017校园招聘编程题
- 挖财2017年校园招聘,编程题
- 完美世界2017校园招聘编程题
- 2008百度校园招聘题一道
- 百度2007年校园招聘笔试题
- 百度2008年校园招聘笔试题
- 2011应届生百度校园招聘题
- 百度2011校园招聘笔试题(一)
- 百度2011校园招聘笔试题(一)
- 百度2012实习生校园招聘笔试题
- md5.js
- How to compile rocksdb with lz4 support
- 第四周项目3-单链表应用(1)
- pycharm快捷键、常用设置、配置管理
- isAssignableFrom与instanceof的区别
- 2017百度校园招聘编程题
- udhcpc的意义
- mysql怎么进行索引优化
- JAVA FileInputStream 与 BufferedInputStream读取效率的比较
- 励志篇
- presto部署
- c++(15)处理类型--decltype类型指示符
- Linux Shell:Linux系统信息查看命令大全
- 21 导航书签一些总结