数据结构与算法(2)----->字符串
1. 字符串的一些特点
1.1 广泛性
(1)字符串可以看作是字符类型的数组----->所以可能会涉及排序+查找;
(2)很多问题都可以转化为字符串类型的方法去解决;
需要注意的是:用java语言实现字符串类型的题目的时候,需要掌握StringBuffer、StringBuilder类和toCharArray方法,来解决问题。
1.2 需要掌握的概念
(1)回文:是一个正读和反读都一样的字符串;
(2)字串:串中任意个连续的字符组成的子序列称为该串的子串;
(3)子序列:不连续;
(4)前缀树(Trie树):
(5)后缀树和后缀数组:
(6)匹配
(7)字典序
1.3 需要掌握的操作
(1)与数组有关的操作:增删改查;
(2)字符的替换
(3)字符串的旋转
2. 字符串题目的常见类型
2.1 规则判断
(1)判断字符串是否符合整数规则;
(2)判断字符串是否符合浮点数规则;
(3)判断字符串是否符合回文字符串规则;
......等等等(是--->true;不是---->faulse)
2.2 数字运算
(1)int和long类型表达整数范围有限,所以经常用字符串实现大整数;
(2)与大整数相关的加减乘除操作,需要模拟笔算的过程;
2.3 与数组操作有关的类型
(1)数组有关的调整、排序等操作需要掌握;
(2)快速排序的划分过程需要掌握和改写;
2.4 字符计数
(1)哈希表
(2)固定长度的数组:C/C++(256长度) java(65536长度)
(3)滑动窗口问题、寻找无重复字符子串问题,计算变位词问题;
2.5 动态规划类型
(1)最长公共子串;
(2)最长公共子序列;
(3)最长回文字串;
(4)最长回文子序列;
......等等
2.6 搜索类型
(1)宽度优先搜索;
(2)深度优先搜索;
2.7 高级算法与数据结构解决问题(比较难,一般面试中不怎么会出现的)
(1)Manacher算法解决最长回文子串问题;
(2)KMP算法解决字符串匹配问题;
(3)前缀树结构
(4)后缀树和后缀数组;
努力成为一个有情怀的程序员~