关于字符串操作的面试题(牛客网视频文字个人理解版)

来源:互联网 发布:淘宝淘盘有手机版app吗 编辑:程序博客网 时间:2024/05/11 15:41
因为找实习,很多公司都要看技术博客,大部分笔记,BUG修复之类的都写在印象笔记上,现在开始往上面搬。
1.规则判断类型
判断字符串是否符合整数规则/浮点数规则/回文字符串规则。
2.数字运算(大整数相关的加减乘除操作)
3.与数组操作有关的类型(与数组有关的调整、排序等操作)
4.字符计数(@1.使用哈希表@2.使用固定长度的 数组@3.用于解决滑动窗口问题、寻找无重复字符子串的问题、计算变位词问题等)
5.动态规划类型
6.搜索类型(@1.宽度有限搜索)
7.高级算法与数据结构解决的问题(@1.Manacher算法解决最长回文子串问题@2.KMP算法解决字符串匹配问题@3.前缀树结构@4.后缀树和后缀数组)

问题1.给定两棵二叉树,判断T2是否是T1某棵子数的结构。
T1序列化成字符串str1;
T2序列化成字符串str2;
用KMP算法判断str1中是否包含str2:如果str1包含str2,说明T1包含于T2结构一致的子树。

问题2:判断两个子树是否互为变形词。
关于变形词的定义说明:如果str1和str2中出现的字符种类一样而且每种字符出现的次数也一样,那么互为变形词。
答案:使用哈希表做字符统计。
str1做字符统计,实现哈希表1,str2做字符计数,实现哈希表2,比较表1和表2是否相同。
可以用固定长度的数组代替哈希表结构。时间复杂度O(n)

问题3:判断str2是否是str1的旋转词。
最优解时间复杂度为O(N)
@1.判断str1和str2是否长度相等
@2.如果长度相等,生成str1+str1的大字符串
@3使用KMP算法对大字符串和str2进行比较,如果找到返回TRUE

问题4.给定一个字符串str,请在单词间做逆序调整
@1.实现能够将字符串局部所有字符逆序的函数f
@2.利用f将字符串所有字符逆序
@3.找到逆序后的字符串中每一个单词的区域,用f对每个单词进行逆序。

问题5.给定一个字符串str,用整数i代表str中某个位置,将str[0...i]移到右侧,str[i+1...N-1]移到左侧
要求时间复杂度O(n),空间复杂度O(1)
@1.将str[0...i]部分的字符串逆序
@2.将str[i+1...n-1]部分的字符串逆序
@3.将str整体字符串逆序

问题6.给定一个字符串数组,找到一种拼接顺序,使得拼接结果为最大
最优解的时间复杂度O(N*logN),实质是一种排序的实现。
@1.如果str1+st2<str2+str1,则str1放在前面,否则str2放在前面
@2.接着将拼接后的字符串str12和str3组合,知道排序完成。

问题7:给定给一个字符串str,将其中所有为空格的字符替换成”%20“
@1.遍历字符串str,发现两空格,所以字符串替换之后长度应该为5+2*2=9
@2.从位置8开始拷贝,把最后一个字符拷贝到8
@3.遇到空格拷贝%20

问题8:给定一个字符串str,判断是不是整体有效的括号字符串
最优解时间复杂度O(N)空间复杂度O(1)
@1.定义一个整形变量num,代表()出现次数的差值
@2.遍历过程中如果遇到(,则num++,遍历过程中如果遇到)则num—;
@3.如果遍历过程中 num<0,则直接返回false.
@4.如果一直没有出现3,则一直遍历下去,直到遍历结束,如果num=0,返回true,否则返回false

问题9:给定一个字符串,返回str最长无重复字符子串长度
最优解时间复杂度O(N),额外空间复杂度O(N)
两个变量:@1.哈希表map:用来统计每种字符之前出现的位置
                  @2.整型变量:代表以s[i-1]结尾的情况下,最长无重复子串的长度。
过程:@1.首先从哈希表中,取出S[i]字符上次出现的位置,位置后一位记为A
           @2.取出pre的位置,用S[i-1]向前数pre-1位的B位置
           @3.如果B位置在A位置的右边,最长距离是从B到S[i]
           @4.如果B位置在A位置的左边,最长距离是A到s[i]
           @5.在map和pre中更新数据,并记录最大值。
需要笔记分享的,可以发邮件到我邮箱,sa515044@mail.ustc.edu.cn,写明需要哪一章,谢谢。
0 0
原创粉丝点击