字符串高频面试题精讲.ppt
- 文档编号:2595077
- 上传时间:2022-11-03
- 格式:PPT
- 页数:17
- 大小:320KB
字符串高频面试题精讲.ppt
《字符串高频面试题精讲.ppt》由会员分享,可在线阅读,更多相关《字符串高频面试题精讲.ppt(17页珍藏版)》请在冰豆网上搜索。
字符串高频面试题精讲七月算法曹曹鹏2015年4月21日2/提纲n字符串简介n面试题总体分析n一些例题o例10-1串交换排序o例2字符的替换和复制o例3交换星号o例4子串变位词o例5单词(字符串)翻转n总结字符串简介o字符串(String)n通常把它作为字符数组njava:
String内置类型,不可更改,要更改的话可考虑转StringBuffer,StringBuilder,char之类nC+:
std:
:
string可更改,也可以考虑用char(char*)nC:
只有charn注意oC+中“”运算符,复杂度未定义,但通常认为是线性的oC+std:
stringsubstr和java的String的subString参数不同o字符范围:
nC/C+-128.+127,我们通常转化为unsigned变为0.+255nJava:
0.655353/面试题总体分析o和数组相关,内容广泛n概念理解:
字典序n简单操作:
插入、删除字符,旋转n规则判断(罗马数字转换是否是合法的整数、浮点数)n数字运算(大数加法、二进制加法)n排序、交换(partition过程)n字符计数(hash):
变位词n匹配(正则表达式、全串匹配、KMP、周期判断)n动态规划(LCS、编辑距离、最长回文子串)n搜索(单词变换、排列组合)4/例10-1交换o把一个0-1串(只包含0和1的串)进行排序,你可以交换任意两个位置,问最少交换的次数?
(国内某公司最新在线笔试题)n分析:
快排partition?
最左边的那些0和最右边的那些1都可以不管o000001.0111.1intanswer=0;for(inti=0,j=len1;ij;+i,-j)for(;(ii)&(aj=1);-j);if(i=0;-j)si-=sj;if(sj=b)si-=b;o思考题:
如何把字符串的空格变成”%20”?
同样,字符数组足够大!
7/例3交换星号o例3一个字符串只包含*和数字,请把它的*号都放开头。
n方法1快排partition数字相对顺序会变化o循环不变式:
0.i1都是*,i.j1是数字,j.n1未探测for(inti=0,j=0;j=0;-i)if(isdigit(si)sj-=si;for(;j=0;-j)sj=*;10/例4子串变位词o给定两个串a和b,问b是否是a的子串的变位词。
例如输入a=hello,b=lel,lle,ello都是true,但是b=elo是false。
(国外某公司最新面试题)n滑动窗口的思想o动态维护一个“窗口”。
o比如b的长度是3,我们考察a0.2,1.3,2.4是否和b是变位词o如何与b比较?
11/例4续1o我们用一个hash,基于字符串的特殊性,我们可以用0.255或者0.65535的数组,我们暂且认为它们都是小写英文字母,用0.25来表示b中每个单词出现多少次。
o我们可以存一下有多少个非0次出现的,以后有用intnonZero=0;for(inti=0;ilenb;+i)if(+numbia=1)+nonZero;12/例4续2o我们用b中的次数减去a中一个“窗口”内的字符种类,如果结果全是0,则找到这样的子串了。
注意num的含义变为了字符种类差o第一个窗口0.lenb1(注意lenalenb无解)for(inti=0;ilenb;+i)intc=aia;-numc;if(numc=0)-nonZero;elseif(numc=-1)+nonZero;if(nonZero=0)returntrue;13/例4续3o窗口如何滑动?
向右移动一位n新窗口ailenb+1.in旧窗口ailenb.i1o扔掉ailenbo加入aifor(inti=lenb;ilena;+i)intc=ailenba;+numc;if(numc=1)+nonZero;elseif(numc=0)-nonZero;c=aia;-numc;if(numc=0)-nonZero;elseif(numc=-1)+nonZero;if(nonZero=0)returntrue;o思考题Leetcode314/例5单词翻转o翻转句子中全部的单词,单词内容不变n例如Imastudent.变为student.aImnin-place翻转字符串第i位到第j位owhile(ij)swap(si+,sj-);n有什么用?
o翻转整个句子:
.tnedutsamIo每个单词单独翻转:
student.aImn难点?
如何区分单词?
找空格,splitn思考题:
字符串循环移位abcdo移动1次变为bcdao移动2次变为cdabo移动3次变为dabco结论:
长度为n,移动m次,相当于移动m%n次n前m%n位翻转,后nm%n位翻转n总体再翻转一次试验一下?
15/总结o我理解的in-place(原地)n本身O
(1)空间n递归,堆栈空间可以不考虑o原地相关的问题n字符串循环左移、右移动n快排partition相关o滑动窗口o能达到O(n)的的时间复杂度oO
(1)的空间复杂度o规则相关细致o匹配(暴力):
KMP比较少见oManacher要求比较高的笔试16/谢谢大家o更多算法视频尽在:
nhttp:
/us:
微博n七月算法n七月问答n曹鹏博士17/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 高频 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)