字符串算法学习笔记(一):字符串基本概念

字符串是生活中很常见的东西,于是,字符串就在算法中有着非常多的运用。

首先给出一点定义

字符集

字符集 Σ \Sigma Σ 是一个全序集,即
∀ α , β ∈ Σ → α < β or α > β \forall \alpha, \beta \in \Sigma \rightarrow \alpha < \beta \quad \text{or} \quad \alpha > \beta α,βΣα<βorα>β
字符集中的元素被称作字符。最常见的字符集是 26 26 26 个英文小写字母。

字符串

字符串 S S S 是由 n n n 个字符构成的有序的,可重复的集合。定义字符串长度 ∣ S ∣ = n |S| = n S=n
在本作者所写的文章中,若无特殊说明,则字符串下标均从 0 0 0 开始。因此可以使用 S [ i − 1 ] S[i - 1] S[i1] 表示字符串 S S S 中的第 i i i 个字符。

子串

字符串 S S S 的子串 s s s S S S 中连续的一段字符。形式化地,
s = S [ i ⋯ j ] , ∣ s ∣ = j − i , 0 ≤ i ≤ j s = S[i \cdots j], |s| = j - i, 0 \le i \le j s=S[ij],s=ji,0ij

子序列

字符串 S S S 的子序列 s s s S S S 中不连续的一段字符,但满足原字符串的前后排列顺序。形式化地,
s = S [ p 1 ] + S [ p 2 ] + ⋯ + S [ p n ] , ∣ s ∣ = n , 0 ≤ p 1 ≤ p 2 ≤ ⋯ ≤ p n ≤ ∣ S ∣ s = S[p_1] + S[p_2] + \cdots + S[p_n], |s| = n, 0 \le p_1 \le p_2 \le \cdots \le p_n \le |S| s=S[p1]+S[p2]++S[pn],s=n,0p1p2pnS

前缀和后缀

字符串 S S S 的前缀 p p p 是一段特殊的子串,满足 p [ 0 ] = S [ 0 ] p[0] = S[0] p[0]=S[0] ∣ p ∣ ≤ ∣ S ∣ |p| \le |S| pS。记作 p ⊏ S p \sqsubset S pS
字符串 S S S 的后缀 s s s 是一段特殊的子串,满足 s [ ∣ s ∣ − 1 ] = S [ ∣ S ∣ − 1 ] s[|s| - 1] = S[|S| - 1] s[s1]=S[S1] ∣ s ∣ ≤ ∣ S ∣ |s| \le |S| sS,记作 s ⊐ S s \sqsupset S sS

后缀重叠定理
对于字符串 x , y , z x, y, z x,y,z 满足 x ⊐ z x \sqsupset z xz y ⊐ z y \sqsupset z yz,若 ∣ x ∣ = ∣ y ∣ |x| = |y| x=y,则 x = y x = y x=y;若 ∣ x ∣ < ∣ y ∣ |x| < |y| x<y,则 x ⊐ y x \sqsupset y xy;若 ∣ x ∣ > y |x| > y x>y,则 y ⊐ x y \sqsupset x yx

字典序

依次比较第 i i i 个字符进行大小比较所得到的编号(?)。特别规定,空字符小于所有字符。

回文

回文是一种特殊的字符串,满足:
∀ i ∈ [ 0 , ∣ S ∣ − 1 ] , S [ i ] = S [ ∣ S ∣ − 1 − i ] \forall i \in [0, |S| - 1], S[i] = S[|S| - 1 - i] i[0,S1],S[i]=S[S1i]

字符串存储

  1. char c[] 类似(C 风格)使用 scanf("%s\n",s+1); 读入。
  2. std::string c 类似(C++ STL 风格)使用 std::cin>>c; 读入。
  3. 字符串常量可以使用字符串字面量(用双引号括起来 "")表示,如 "abababc"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值