字符串类型的算法面试题特点
1. 广泛性
1.字符串可以看做字符类型的数组与数组排序、查找、调整有关
2.很多其它类型的面试题可以看做字符串类型的面试题
注意:用JAVA实现字符串类型的题目是,由于java.lang.String类型不可修改,我们可以使用StringBuffer,StringBuileder类和toCharArray方法。
2. 需掌握的概念
回文、字串(连续)、子序列(不连续)、前缀树(Trie树)、后缀树和后缀数组、匹配、字典序。
3. 需掌握的操作
与数组有关的操作:增删改查;字符的替换;字符串的旋转。
字符串题目的常见类型
1. 规则判断
1.判断字符串是否符合整数规则
2.判断字符串是否符合浮点数规则
3.判断字符串是否符合回文字符串规则
2. 数字运算
int和long类型表达整数范围有限,所以经常用字符串实现大整数
与大整数相关的加减乘除操作,需要模拟笔算的过程
3. 与数组操作有关的类型
1.数组有关的调整、排序等操作需要掌握
2.快排的划分过程需要掌握和改写
4. 字符计数
1.哈希表
2.固定长度的数组
c/c++(256长度)java(65536长度)
3.滑动窗口问题、寻找无重复字符字串问题、计算变位词为题
5. 动态规划类型
1.最长公共字串
2.最长公共子序列
3.最长回文字串
4.最长回文子序列
6. 搜索类型
1.宽度优先搜索
2.深度优先搜索
7. 高级算法与数据结构解决的问题
1.Manacher算法解决最长回文字串问题
2.KMP算法解决字符串匹配问题
3.前缀树结构
4.后缀树和后缀数组
题目一
给定彼此独立的两颗树头节点分别为t1和t2,判断t1中是否有与t2树拓扑结构完全相同的子树。

解法1:普通解法为二叉树遍历+匹配问题
考察t1中一每个节点为头的子树是否与t2一致 N代表t1节点 M代表t2节点
该算法的时间复杂度为O(N*M)
解法2:最优解法为二叉树序列化+KMP算法
时间复杂度为O(M+N)

 **题目二**
给定两个字符串str1和str2,如果str1和str2中出现的字符串种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词,请实现函数判断两个字符串是否互为变形词。
举例:
str1="123",str2="231".返回true
str1="123",str2="2331",返回false

解法:使用哈希表做字符计数
可以用固定长度的数组代替哈希表结构,时间复杂度为O(N),额外空间复杂度为O(N)
题目三
如果一个字符串str,把字符串str前面任意的部分挪到后面去形成的字符串叫做str的旋转词。比如str=”1234”,str的旋转词有”1234”,”2341”,”3412”,”4123”.给定两个字符串a和b,请判断a和b是否为旋转词。
最优解时间复杂度O(N):
1.判断str1与str2是否长度相等
2.如果长度相等,生成str1+str1的大字符串
3.用KMP算法判断大字符串中是否含有str2
举例说明:
str1 = “1 2 3 4”
str1 + str1 = “1 2 3 4 1 2 3 4”
如果str1长度为N,在str1 + str1的字符串中任意一个长度为N的字串都是str1的旋 转词。
题目四
给定一个字符串str,请在单词间做逆序调整。
举例:”pig loves dog”逆序成”dog loves pig”.
“I’m a student.” 逆序成”student. a I’m”.
解法:
1.实现将字符串局部所有字符逆序的函数f
2.利用f将字符串所有字符逆序
“pig loves dog” —> “god sevol gip”
3.找到逆序后的字符串中每一个单词的区域利用f将每一个单词的区域逆序
“god sevol gip” —>”dog loves pig”
题目五
给定一个字符串str,和一个整数i,i代表str中的位置,将str[0..i]移到右侧,str[i+1…N-1]移到左侧。
举例:str=”ABCDE”,i=2.将str调整为“DEABC”。要求,时间复杂度为O(N),额外空间复杂度为O(1)
解法:
1.将Str[0..i]部分的字符逆序
A B C D E
C B A D E
2.将str[i+1..N-1]部分的字符逆序
C B A D E
C B A E D
3.将str整体的字符逆序
C B A E D
D E A B C
题目六
给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的,并返回这个大字符串。
举例:
strs = [“abc”,”de”].可以拼成”abcde”,也可以拼成”deabc”,但前者字典顺序更小,所以返回”abcde”.
解法:最优解的时间复杂度O(N*logN),其实质是一种排序的实现
方案一:根据单独每个字符串的字典顺序排序
[“abc”,”de”]—->[“abc”,”de”]
该方案是错误的,比如:
[“ba”,”b”]–>[“b”,”ba”]拼接后为“bba”
方案二:str1和str2按照如下方式比较。
如果str1 + str2 < str2+str1,则str1放在前面,否则,str2放再前面
题目七
给定一个字符串str,将其中所有空格字符替换成”%20”,假设str后面有足够的空间
该题目用java解决起来比较简单
题目八
给定一个字符串,判断是不是整体有效的括号字符串
1.整形变量num,代表’(‘出现次数与’)’出现次数的差值
2.遍历的过程中如果遇到’(‘,则num++
3.遍历的过程中如果遇到’)”,则num–
4.遍历的过程中如果num<0,则直接返回false
5.如果已没有出现情况4,则一直遍历下去。
6.遍历完成后,如果num==0,则返回true,否则返回false
题目九
给定一个字符串str,返回str的最长无重复字符字串的长度。
举例:str=”abcd”,返回4
str=”abcb”,最长无重复字符字串为”abc”,返回3
最优解时间复杂度O(N),额外空间复杂度O(N)
求出以str中每个字符结尾的情况下,最长无重复字符字串的长度,并在其中找出最大值返回。



字符串类型的算法面试相关推荐

  1. 如何搞定不同公司的算法面试?(早早聊分享文字版)

    前几天西法参加了<前端早早聊>第 24 界的分享.我的分享主题是<如何搞定不同公司的算法面试?> 这是这次分享的文字版,供大家查看.如果大家需要分享的原版 ppt,也可以到我的 ...

  2. 几道 BAT 算法面试中经常问的「字符串」问题

    https://www.toutiao.com/a6675839856192520711/ String 作为最常见的编程语言类型之一,在算法面试中出现的频率极高. 1. 验证回文串 题目来源于 Le ...

  3. c 给定字符串中查找_面试 | 查找类算法精析

    点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 前言 查找,是使用计算机处理问题时的一个最基本的任务,因此也是算法面试中非常常见的一类问题.很多算法问题的本质,就是 ...

  4. 面试官问:mysql中时间日期类型和字符串类型的选择

    摘要:MySQL中有多种表示时间日期的数据类型,主要有YEAR.TIME.DATE.DATETIME.TIMESTAMP等 本文分享自华为云社区<一针见血,mysql中时间日期类型和字符串类型的 ...

  5. 前 Google 工程师总结的算法面试指南

    作者 | 小争哥 出品 | 小争哥 (ID:xiaozhengge0822) 为什么要学习算法和数据结构?尽管原因有很多,比如锻炼逻辑思维能力.编码能力.阅读源码的能力等等,但我想对于大多数人来说,最 ...

  6. 【字符串】字符串查找 ( Rabin-Karp 算法 )

    文章目录 一.字符串查找 二.Rabin-Karp 算法 一.字符串查找 算法题目链接 : https://www.lintcode.com/problem/13/ 在 一个字符串 中查找 另外一个字 ...

  7. 微软等数据结构+算法面试100题全部答案集锦

    微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...

  8. 算法面试:精选微软等公司经典的算法面试100题 第26-35题

    算法面试:精选微软等公司经典的算法面试100题 第26-35题 26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字 ...

  9. [整理III]微软等数据结构+算法面试100题[最新第61-80题]

    精选微软等数据结构+算法面试100题[第61-80题] --最新整理公布 昨日,11.19,最新整理了,第61-80题,现在公布. 可以这么说,绝大部分的面试题,都是这100道题系列的翻版, 此微软等 ...

最新文章

  1. 多模态任务新蓝海:视觉语言导航最新进展
  2. 链路聚合_rhel7下的链路聚合配置
  3. 了解cron以及使用cron定时备份MySQL
  4. 《原力计划【第二季】》第 2 周周榜揭晓!!!
  5. Web 设计师的 50 个超便利工具[下]
  6. Redis的持久化策略
  7. IDEA设置文件模板
  8. 吴恩达深度学习课程第四章第二周编程作业(pytorch实现)
  9. 学习周刊-2021年第19周
  10. 上海数据分析师面试经历
  11. OpenWrt 把SD卡挂载到 /overlay
  12. linux如何禁用独立显卡驱动,Ubuntu中独立显卡不好用如何关闭独立显卡
  13. 如何将原始SNP信息转化为0,1,2的矩阵形式
  14. 学习win32汇编指令:lea和offset
  15. JavaSE——StringBuffer与StringBuilder拼接字符串详细解释
  16. JavaSE语法(3)——【逻辑控制:各种分支循环语句】
  17. PHP 微信公众号真正正确的客服头像上传
  18. 【GTK4】又快年底了,100行代码教你做一款简单的年会抽奖软件
  19. SpringBoot框架分层(View层、Controller层、Service层、Mapper层、pojo层)
  20. CSS小技巧-为内盒子添加margin-top时,会带着父盒子一起下来,如何解决?

热门文章

  1. DC/DCT/DCG 差别和联系
  2. 线性探测法和平方探测法 - 哈希表 - 完整代码
  3. 皮革行业分销渠道管理系统有效缩短供销链,提升渠道运营收益
  4. 【云原生 • Docker】Docker常用命令总结(值得收藏)
  5. 计算机论文折线图,干货 | 画论文折线图、曲线图?几个代码模板轻松搞定!
  6. Appium: Windows系统桌面应用自动化测试(一)
  7. javaweb 图书管理系统完整代码_群晖 + Docker + Calibre-Web 搭建电子书管理系统
  8. etal斜体吗 参考文献_参考文献方面毕业论文格式模板,与文下载****北京化工大学学报相关论文下载...
  9. 所有的环境都配置好了,将新创建的weex项目导入到Android studio中的时候,出现的错误。...
  10. InstantNGP