F面经prepare:strstr变种
2016-01-12 10:27
417 查看
* Given an integer k>=1 and two strings A and B (length ~n each); * Figure out if there is any common substring of length at least k. * (i.e. any string of length at least k, that is a substring of both A and B) * * A="facebook", B="bookshelf", k=3 ==> true ^^^ ^^^ * A="facebook", B="bookshelf", k=4 ==> true ^^^^ ^^^^ * A="facebook", B="bookshelf", k=5 ==> false
public boolean check(String A, String B, int k) { int lenA = A.length(); int lenB = B.length(); for (int i=0; i<=lenA-k; i++) { String stra = A.substring(i, i+k); for (int j=0; j<=lenB-k; j++) { String strb = B.substring(j,j+k); if (stra.equals(strb)) return true; } } return false; }
follow up: How to optimize?
想到KMP了,trie了,居然没有想到HashSet,然后KMP和trie的时间复杂度又没有搞太对
他们真的很喜欢问时间复杂度,空间复杂度,时间换空间,空间换时间
public boolean check(String A, String B, int k) { //store B's substring of length k to hashSet HashSet<String> set = new HashSet<String>(); for (int i=0; i<B.length()-k; i++) { set.add(B.substring(i, i+k)); } for (int i=0; i<A.length()-k; i++) { String sbstra = A.substring(i, i+k); if (B.contains(sbstra)) return true; } return false; }
这道题一点都不难,只是
1.受以前思维定式影响
2. 考场真的是思路就很局限, 放不开
3. 这道题面经还见过,别人提到过set,没细看,恰好这个方法忘记了
4. 考场写的时候,真的是连for(int i=0; i<=A.length()-k; i++) 这个是不是A.length()-k都想不清楚
应对:
1.重视面经。看过做过会占很大便宜
2. 要加强时间复杂度,空间复杂度训练
3. 要加强思维敏捷度训练
4. 写code能力(比如这次A.length()-k)
相关文章推荐
- Eclipse闪退/打不开/无法启动/一闪而过
- nyoj An problem about date (蔡勒公式)
- 如何用photoshop将方形图片处理成圆形图片
- 修改android项目名
- 岁月是轮回的梦
- 删除svn中指定的文件以及合并svn版本库
- svg_鼠标手型
- HiveSql(2)Lateral view_转行为列
- Redis学习记录之命令KEY(六)
- Qt使用教程之创建移动应用程序(三)
- 【第八章】 对ORM的支持 之 8.2 集成Hibernate3 ——跟我学spring3
- Callable,Runnable比较及用法
- 欢迎使用CSDN-markdown编辑器
- android应用程序中获取view 的位置
- iOS 在UILabel显示不同的字体和颜色(ios6 and later)
- 01-12 自定义tabbar (转)
- 判断存储过程是否存在某个参数名
- jquery实现限制textarea输入字数
- Cairo Tutorial for Python Programmers
- Wireshark(1):Wireshark基本用法