直通BAT面试算法精讲--字符串(1)

字符串面试题的特点: 


1.广泛性 
(1)字符串可以看做字符类型的数组,与数组排序、查找、调整有关 
(2)很多其他类型的面试题可以看做字符串类型的面试题 

注意:

       如果使用java实现字符串类型的题目时,需要掌握 StringBuffer,String Builder类和toCharArray(将字符串转化为字符类型的数组) 方法
2.需要掌握的概念 
(1)回文 
(2)子串(连续) 
(3)子序列(不连续) 
(4)前缀树(Trie树) 
(5)后缀树和后缀数组 
(6)匹配 
(7)字典序 
3.需掌握的操作: 
(1)与数组相关的操作:增删改查 
(2)字符的替换 
(3)字符串的旋转

字符串题目的常见类型 
1.规则判断: 
(1)判断字符串是否符合整数规则 
(2)判断字符串是否符合浮点数规则 
(3)判断字符串是否符合回文字符串规则 
2.数字运算 
int和long类型表达范围有限,所以经常用字符串实现大整数 
与大整数相关的加减乘除操作,需要模拟笔算的过程 
3.与数组操作有关的类型 
(1)数组相关的调整,排序等操作需要掌握 
(2)快速排序的划分过程需要掌握和改写 
4.字符计数 
(1)哈希表 
(2)固定长度的数组 (可以代替哈希表)
(3)常见的有 滑动窗口问题、寻找无重复字符子串问题,计算变位词问题 
5.动态规划问题 
(1)最长公共子串 
(2)最长公共子序列 
(3)最长回文子串 
(4)最长回文子序列 
6.搜索类型 
(1)宽度优先搜索 (如两个字符串,其中 一个一次只能变化一个位置,文如何变化成另一个字符,输出变化轨迹)
(2)广度优先搜索 
7.高级算法与数据结构解决的问题 
(1)Manacher(马拉车)算法解决最长回文子串问题 
(2)KMP算法解决字符串匹配问题 
(3)前缀树问题 
(4)后缀树和后缀数组 
(5)通常面试中很少出现

 

案例一


拓扑结构相同子树练习题 
 

普通解法:为二叉树遍历问题+匹配问题

     考察t1中以每个节点为头的子树是否与t2树完全一样,这个过程的实践复杂度是O(M),t1的子树共有N棵,所以时间复杂度为O(M*N) 

最优解法:二叉树序列化+KMP算法(字符寻找或匹配) 
      首先把t1树和t2树按照先序遍历的方式序列化,之后用KMP算法去判断t2Str是否是t1Str的子串即可。t1的序列化的过程是O(N),t2的序列化是O(M),KMP算法解决匹配问题的复杂度是O(M+N),所以总体时间复杂度是O(M+N)

案例二


词语变形练习题

 

解题思路: 

解法1:使用哈希表做字频统计


解法2:使用固定长度的数组来存放每个字符串里面出现的次数, 代替哈希表结构,
对每个串进行计数,最后再比较是否相同。时间复杂度为O(N)

java中ASCII码的长度范围为65535,生成长度为65536长度的固定数组,来替代经典哈希表结构,省空间,速度也更快。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值