[google面试CTCI] 1-8.判断子字符串
来源:互联网 发布:淘宝刷评价 编辑:程序博客网 时间:2024/04/30 01:37
【字符串与数组】
Q:Assume you have a method isSubstring which checks if one word is a substring of another Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using
only one call to isSubstring (i e , “waterbottle” is a rotation of “erbottlewat”)
题目:给定一个能判断一个单词是否为另一个单词的子字符串的方法,记为isSubstring。书写代码来判断S2是否能通过旋转S1得到。(只能使用一次isSubstring方法)
解答:
以waterbottle和erbottlewat为例,我们只有使用一次isSubstring的机会,但是单单从这两个字符串来看,我们找不到彼此之间的子串关系。因此,可以考虑去改变、构造(几何里的做辅助线)字符串。要判断S2是否能通过旋转S1得到,我们可以先将S1扩展成S1S1,即erbottlewat扩展成erbottlewaterbottlewat,然后再判断S2是否为S1S1的子串。当然,将S2扩展成S2S2,然后再判断S1是否为S2S2的子串是同样的道理。
代码如下所示:
int is_rotation(char* str1,char* str2){int len1=strlen(str1);int len2=strlen(str2);if(len1!=len2)return 0;char* newStr=malloc(len1*sizeof(char));strcpy(newStr,str1);strcat(newStr,str1);int rValue;rValue=isSubString(newStr,str2);free(newStr);return rValue;}
上面代码中的isSubString是字符串匹配算法,最著名的有KMP算法、BM算法等,其思想及其具体实现,可以查看博客里的另外两篇文章。
作者:Viidiot 微信公众号:linux-code
- [google面试CTCI] 1-8.判断子字符串
- [google面试CTCI] 1-1.判断一个字符串是否包含重复字符
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
- [google面试CTCI] 1-2 逆转c风格字符串
- [google面试CTCI]1-3.字符串去重
- [google面试CTCI] 1-5.替换字符串中特定字符
- [google面试CTCI] 1-6.图像旋转问题
- [google面试CTCI] 1-7.将矩阵中特定行、列置0
- [google面试CTCI] 2-0.链表的创建
- [google面试CTCI] 2-1.移除链表中重复元素
- 《CTCI》1.8 调用一次isSubstring判断旋转字符串
- 《CTCI》1.5 字符串“压缩”
- [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
- [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
- [google面试CTCI] 2-4 计算两个单链表所代表的数之和
- CTCI系列--1.1 判断一个字符串中的字符是否唯一(C语言)
- CTCI系列--1.3 判断两个字符串是否互为变换(C语言)
- Google 面试题 | 判断字符串是否可由重复子字符串组成
- MyEclipse8.6优化设置
- mongodb java api常用方法的使用以及和spring的集成使用
- 《编写高质量代码:改善Java程序的151个建议》读书笔记:java开发中通用的方法和准则
- STL中map用法详解
- cf 357C
- [google面试CTCI] 1-8.判断子字符串
- (收藏) Linux设备驱动程序学习-Linux设备模型(总线、设备、驱动程序和类)
- Apple's OpenGL:初窥OpenGL Shaders
- 功能、权限控制
- 数据流图的画法
- 如何唤醒socket被阻塞的函数
- Apache服务器在CentOS release 6.4 (Final)上的安装
- Git简介
- foobar2000 1.1.10 用苹果新近开源的ALAC编码器很方便将APE、FLAC、WAV转无损m4a