Compress Words
2024-09-01 20:31:55
直接套 KMP 即可(那为什么打 cf 的时候没有想到...),求出后一个单词(word)的前缀数组,然后从前面已得的字符串的末尾 - word. length () 开始查询利用前缀数组进行优化即可
代码:
// Created by CAD on 2019/8/12.
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int, int>;
using piii=pair<pair<int, int>, int>;
using ll=long long;
const int maxn=1e6+5;
int nxt[maxn];
void get_next(string s)
{
int i=0,j=-1;nxt[0]=-1;
int n=s.length();
while(i<n)
{
if(j==-1||s[i]==s[j])
nxt[++i]=++j;
else j=nxt[j];
}
}
string ans,word;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
for(int i=1;i<=n;++i)
{
cin>>word;
int wlen=word.length();
int alen=ans.length();
get_next(word);
int match=0;
for(int j=max(alen-wlen,0);j<alen;++j)
{
while(match>0&&ans[j]!=word[match]) match=nxt[match];
if(ans[j]==word[match]) match++;
}
ans+=word.substr(match);
}
cout<<ans<<endl;
return 0;
}
最新文章
- JDBC之——一个单线程JDBC基类和一些注意事项
- sql查看数据字典(表结构)
- 《c程序设计语言》读书笔记-字符型0-9转为数字0-9
- 高性能网络I/O框架-netmap源码分析
- UBOOT的多支持性与可裁剪性
- WPF自定义圆形按钮样式资源文件
- leetcode第12题--Integer to Roman
- thinkphp后台ajaxReturn提示下载的问题
- cmder中文乱码、文字重叠等问题
- 如何改变XCode的默认设置
- bnu——GCD SUM (莫比乌斯反演)
- redis集群之主从架构
- Machine Learning--week3 逻辑回归函数(分类)、决策边界、逻辑回归代价函数、多分类与(逻辑回归和线性回归的)正则化
- Android View体系(六)从源码解析Activity的构成
- python技巧 一等函数
- jmeter之最佳实践
- Struck 跟踪算法(二)
- Tensorflow设置显存自适应,显存比例
- python 源码安装
- GIS(地理信息系统)