![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数组和字符串面试题汇总
moses1213
积跬步,至千里;积小流,成江海!
展开
-
KMP算法详解
原文出处:http://billhoo.blog.51cto.com/2337751/411486/【KMP算法简介】 KMP算法是一种改进后的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。通过一个辅助函数实现跳过扫描不必要的目标串字符,以达到优化转载 2016-07-26 16:57:31 · 325 阅读 · 0 评论 -
C++中的变位词问题
题目:给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这道题目是个典型的变位词问题,即一个字符串是否是另一个字符串的乱序版本,解题思路很多,下面总结三种方法,有其他方法还会更新。解法一:最直观的想法就是对两个字符串排序,然后比较两个字符串。这里利用STL里的sort进行排序,头文件。int cmp(char a, char b){ return原创 2016-07-15 20:35:01 · 1090 阅读 · 0 评论 -
C++判断字符串是否所有字符全都不同
1.实现一个算法,确定一个字符串的所有字符是否全都不同。假如不允许使用额外的数据结构,又该如何实现?解法一:对于数据量有限的数据,可以利用这一特征进行简化处理。譬如对公司员工年龄排序的问题,年龄的范围是有限的,可以定义一个固定大小的数组。ASCII中字符的个数也是有限的,有256个。因此这题可以用一个大小为256的数组,遍历字符串时把对应的个数记录在数组里,数组某一项数字超过1那么就表示有重复原创 2016-07-16 21:18:47 · 1837 阅读 · 0 评论 -
判断子串和判断两个字符串是否由另一个旋转而来的问题
题目:假定又一个IsSubString,可检查一个单词是否为其他字符串的子串。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次IsSubString。(比如,waterbottle是erbottlewat旋转后的字符串。) 首先要解决的是判断是不是子串的问题,这个不难。然后判断其中一个字符串是不是另一个字符串旋转而成。以题中例子为例,以旋转的分界线原创 2016-07-17 16:00:46 · 1228 阅读 · 0 评论 -
二维矩阵的旋转问题(二维数组作为函数参数)
题目:给定一幅有N*N矩阵表示的图像,其中每个像素的大小为4字节,编写一个方法,将图像旋转90度。不占用额外的存储空间能否做到?思路:假设旋转是按照顺时针方向,那么右旋90度就是左移到上,上移到右,右移到下,下移到左。将矩阵分层,由外到内或者有内到外旋转。重点复习数组和指针的有关概念,如果是二维数组,例如int a[m][n],那么a表示的是数组指针,即作为参数传入函数应该是int (*a原创 2016-07-16 22:27:25 · 3331 阅读 · 0 评论 -
字符串压缩问题
5.利用字符重复的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa"会变为"a2b1c5a3"。若压缩后的字符串没有变短,则返回原先的字符串。这道题主要考虑的是字符串的拼接效率问题,但是C++中的拼接效率似乎与java中并不一致,关于拼接的效率,可以参考博客:c++拼接字符串效率比较(+=、append、stringstream、sprintf)原创 2016-07-16 21:21:53 · 710 阅读 · 0 评论 -
字符串反转算法
2.用C或者C++实现void reverse(char* str)函数,即反转一个NULL结尾的字符串。解法:这道题比较简单,需要注意的是不能使用额外空间,就地反转。void reverse(char* str){ if(str == NULL) return; char* start, *end; start = end = str; for(; *end;原创 2016-07-16 21:20:10 · 558 阅读 · 0 评论 -
字符串之最
字符串里有一类问题经常遇到,就是最长问题。归纳为:最长公共子串、最长公共子序列、最长回文子串、最长重复子串、最长不重复子串问题。这一篇在这里做个总结,给出每个问题的解题思路。1.最长公共子串最长公共子串和最长公共子序列非常类似,但是子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。方法一:平移法:引用自博客http://blog.csdn.net/hackbuteer1/a原创 2016-07-31 11:13:54 · 503 阅读 · 0 评论 -
最长回文字串-Manacher解法
对于一个比较长的字符串,O(n^2)的时间复杂度是难以接受的。Can we do better? 先来看看解法2存在的缺陷。1) 由于回文串长度的奇偶性造成了不同性质的对称轴位置,解法2要对两种情况分别处理;2) 很多子串被重复多次访问,造成较差的时间效率。缺陷2)可以通过这个直观的小转载 2016-08-01 19:37:42 · 491 阅读 · 0 评论