题意 给定一个字符串S,定义子串subS[i] = S[0..i],定义C[i]为S中subS[i]的数量,求sigma(C[i])(0<=i<N). 思路 我们以子串结尾的位置来划分阶段求解,即,设ans[i]表示以第i个字符为结尾的子串的个数,则res = sigma(ans[i]). 那么我们怎么求出以某个位置为结尾的字符串中有多少是subS[i]呢? 考虑subS[i]就是S的N个前缀,而以某个位置为结尾又是后缀,所以我们自然要想到利用next数组---前缀后缀对称来解决这个问题. 由…
题目链接:https://vjudge.net/problem/SPOJ-SUBST1 SUBST1 - New Distinct Substrings #suffix-array-8 Given a string, we need to find the total number of its distinct substrings. Input T- number of test cases. T<=20; Each test case consists of one string, who…
11: KMP next 的强大 题意求前缀在S中出现的次数之和 next[j] 表示 S[0....NEXT[J]]==S[J-NEXT[J].....J]; 于是我们得到..后加入一个字符所得到新的前缀会多ADD[next[J]]个 #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<math.h> using namespa…
子串可重叠情况: int fun1(const std::string& str, const std::string& sub){ int num = 0; for (size_t i = 0; (i = str.find(sub, i)) != std::string::npos; num++, i++); return num; } 子串不可重叠情况: int fun2(const std::string& str, const std::string& sub){…
C++自定义String字符串类 实现了各种基本操作,包括重载+号实现String的拼接 findSubStr函数,也就是寻找目标串在String中的位置,用到了KMP字符串搜索算法. #include <iostream> #include <cstring> using namespace std; class String; class Data{ // 抽象基类Data public: virtual const int compareTo(const String&…
Reincarnation Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 843    Accepted Submission(s): 283 Problem Description Now you are back,and have a task to do:Given you a string s consist of lower…
http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给出一个字符串和q次询问,每次询问[l,r]区间内不同子串的个数 分析: N<=2000. 我是用后缀自动机预处理出所有区间的不同子串个数. 建立n次后缀自动机. 为什么要建立N次呢? 因为鸭 , 后缀自动机之所以有继承性是因为定义的起点是相同的 , 而起点不同是没有继承性的  , 所以要枚举n次不同的节点建立后缀自动机. 用一个变量t , 不断的累加建立到当前点有多少个不同的字符串 , 就是前缀…
Sample Input14abab Sample Output6输出包括从1到len长 字符串前缀的总个数abab:包括2个a,2个ab,1个aba,1个abab # include <cstdio> # include <cstring> using namespace std; ] ; ] ; ] ; int len ; void getNext() { int j, k; j = ; k = -; next[] = -; while(j < len) || S[j]…
给出一个string字符串,统计里面出现的字符个数 解决方案: 使用algorithm里面的count函数,使用方法是count(begin,end,'c'),其中begin指的是起始地址,end指的是结束地址,第三个参数指的是需要查找的字符. #include<bits/stdc++.h> using namespace std; int main() { string s;char c; cin>>s>>c; int num=count(s.begin(),s.en…
前言 public struct String public class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCoding Swift 语言主要使用 String 和 Character 来存储字符数据.String 是字符串类型,Character 是字符类型,一个或多个字符组成一个字符串. String : Swift 语言中的 String 类型与经典 Cocoa 或 Cocoa Touch 框架中的 Foun…