传送门:后缀自动机一·基本概念

后缀自动机(Suffix Automaton,简称SAM)是处理字符串的很强大的工具,对于一个字符串S,它对应的后缀自动机是一个最小的确定有限状态自动机(DFA),接受且只接受S的后缀。
对于字符串S="aabbabd",它的后缀自动机是:

介绍一个概念子串的结束位置集合 endpos。对于S的一个子串s,endpos(s) = s在S中所有出现的结束位置集合。还是以S="aabbabd"为例,endpos("ab") = {3, 6},因为"ab"一共出现了2次,结束位置分别是3和6。同理endpos("a") = {1, 2, 5}, endpos("abba") = {5}。

对于S="aabbabd":

状态 子串 endpos
S 空串 {0,1,2,3,4,5,6}
1 a {1,2,5}
2 aa {2}
3 aab {3}
4 aabb,abb,bb {4}
5 b {3,4,6}
6 aabba,abba,bba,ba {5}
7 aabbab,abbab,bbab,bab {6}
8 ab {3,6}
9 aabbabd,abbabd,bbabd,babd,abd,bd,d {7}

hiho 大神

094791
van048
FakerInHeart

094791's beautiful Code

//后缀自动机一·基本概念
//hiho127
#include <bits/stdc++.h>
using namespace std;void print(set<int>&s){set<int>::iterator it;for(it=s.begin();it!=s.end();it++){printf("%u ",*it);}putchar('\n');
}
int main(){string s;map<string,set<int> >m;cin>>s;int i;int l;// 好优美!for(l=1;l<=s.length();l++){for(i=0;i+l<=s.length();i++){string sub=s.substr(i,l);set<int>tmp=m[sub];tmp.insert(i+l);m[sub]=tmp;}}int t;cin>>t;while(t--){cin>>s;string lstr=s;string sstr=s;set<int>tmp=m[s];map<string,set<int> >::iterator it;for(it=m.begin();it!=m.end();it++){if(it->second==tmp){if(lstr.length()<it->first.length()){lstr=it->first;}if(sstr.length()>it->first.length()){sstr=it->first;}}}printf("%s %s ",sstr.c_str(),lstr.c_str());print(tmp);}return 0;
}

转载于:https://www.cnblogs.com/shengwang/p/9794450.html

【hiho】127 后缀自动机一·基本概念 【后缀自动机】相关推荐

  1. hihoCoder #1441 : 后缀自动机一·基本概念

    题目链接 输入 第一行包含一个字符串S,S长度不超过50. 第二行包含一个整数N,表示询问的数目.(1 <= N <= 10) 以下N行每行包括一个S的子串s,s不为空串. 输出 对于每一 ...

  2. HihoCoder - 1441 后缀自动机一·基本概念(模拟)

    描述 小Hi:今天我们来学习一个强大的字符串处理工具:后缀自动机(Suffix Automaton,简称SAM).对于一个字符串S,它对应的后缀自动机是一个最小的确定有限状态自动机(DFA),接受且只 ...

  3. 后缀自动机入门/基本概念

    教程链接 (本文为适应自己的理解,对原文做出删改,建议到原文学习) 后缀自动机可以干啥? 后缀自动机(SAM)可以解决许多字符串相关问题.是一个特别nb的数据结构.它可以: 1.在另一个字符串中搜索一 ...

  4. 后缀树系列一:概念以及实现原理( the Ukkonen algorithm)

    首先说明一下后缀树系列一共会有三篇文章,本文先介绍基本概念以及如何线性时间内构件后缀树,第二篇文章会详细介绍怎么实现后缀树(包含实现代码),第三篇会着重谈一谈后缀树的应用. 本文分为三个部分, 首先介 ...

  5. EXE转JPG后缀格式工具(真实JPG后缀)

    EXE转JPG后缀格式工具(真实JPG后缀) exe转换为jpg工具,双击之后正常运行. 杀毒软件误报 本程序禁止用于违法操作. 下载地址 链接: https://pan.baidu.com/s/1b ...

  6. 前端判断文件后缀名_JS 获取文件后缀,判断文件类型(比如是否为图片格式)

    1.获取文件后缀H3I免费资源网 有时候我们需要通过文件名或者路径,得到该文件的后缀名(扩展名),可以通过如下方式进行截取:H3I免费资源网 //文件路径 var filePath = "f ...

  7. c++:中缀表达式和后缀表达式,中缀转后缀(简析)

    一:什么是中缀表达式 中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间 举例: 1+2*3=7 其实就是我们平时的运算 二:什么是后缀表达式 又称逆波兰表达式,指的是 ...

  8. 【元胞自动机】基于元胞自动机模拟交通事故道路通行量matlab源码

    一.简介 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法.典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态.变化规则适用于每一个元胞并且同时进行.典型的变化规则 ...

  9. c#元胞自动机_用元胞自动机实现多数分类算法

    元胞自动机(Cellular automaton) 元胞自动机是由元胞组成的网格,每个元胞都根据邻域的状态来选择开或关.所有的元胞都遵循同样的规则,也称为元胞的更新规则,规则根据各元胞邻域的当前状态决 ...

最新文章

  1. 架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)
  2. android与苹果平板生态,Android和Apple平板电脑的性价比比较
  3. (转)linux如何让历史记录不记录敏感命令
  4. mysql故障诊断_mysql常见故障诊断
  5. 【原创】大叔案例分享(3)用户行为分析--见证scala的强大
  6. 【Linux】开源分布式存储系统:GlusterFS
  7. openfoam211版本安装
  8. 使用 csv 导入的方式在 SAP S/4HANA 里创建 employee 数据
  9. 为WPF播放GIF伤神不?
  10. nginx的日志文件配置
  11. 学计算机单招可以报那几个公立学校,为什么要选择公办单招学校,四川公办单招学校有哪些?...
  12. Linux的开源免费办公软件,开源免费Office办公套件(LibreOffice)
  13. 怎么做装修预算?装修预算需要注意的三大事项
  14. 雪景特效制作软件JixiPix Snow Daze for Mac
  15. 上市公司创新研发支出数据(2006-2018年)
  16. 写程序电脑常用快捷键
  17. 传奇私服开服架设教程 传奇服务端设置教程
  18. Java打印输出左下三角、右下三角、正上三角、倒三角、菱形
  19. 大二Web课程设计——家乡主题网页设计(web前端网页制作课作业) 四川旅游网页设计制作
  20. 齐鲁工业大学计算机科学与技术学院院长,齐鲁工业大学计算机科学与技术学院导师教师师资介绍简介-赵盛荣...

热门文章

  1. 1047. 编程团体赛(20)-PAT乙级真题
  2. 蓝桥杯 ADV-95 算法提高 字符串比较
  3. 1052. 卖个萌 (20)-PAT乙级真题
  4. 0基础web开发 python_真零基础Python开发web
  5. python 3d重建_三维人脸重建(一)——Python读取obj文件
  6. opencore0.6.4_iOS 13.4/iPadOS 13.4正式版发布:iCloud支持文件夹共享
  7. nginx历史版本下载链接
  8. 一.oracle的SQL中group by使用的情况(与聚合函数的关系)
  9. 项目开发中对使用的第三方库统一进行管理__添加属性表/页
  10. 最大连续子数组和求解问题