数据结构与算法(2)----->字符串

时间:2023-01-03 18:02:29

 

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)后缀树和后缀数组;