[编程之美] PSet3.1 字符串移位包含的问题
来源:互联网 发布:c语言常用代码 编辑:程序博客网 时间:2024/04/29 23:40
问题描述:
给定两个字符串s1和s2,要求判定s2是否弄够被s1做循环移位(rotate)得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false.
思路分析:
解法一:直接循环移位
代码如下:
//解法一:通过对src循环移位判断是否dst在src内bool findStr(char src[],char dst[],int srcLen , int dstLen){int K = srcLen;while(K--){//循环右移dstLen次恢复原位char tempChar = src[srcLen-1];for(int i=srcLen-1 ; i>=1 ; i--)//移位一次src[i] = src[i-1];src[0] = tempChar;if(strstr(src,dst))return true;}return false;}
解法二:直接分析移位结果,发现ABCD移位后的结果一定是ABCDABCD的子串,通过提高空间复杂度来换取时间复杂度的降低。代码如下:
//解法二:通过在组合字符串[src,src]上寻找dst进行判定bool findStr(char src[],char dst[], int srcLen){bool flag = false;char *srcsrc = new char[2*srcLen+1];//多存放一个'\0'strcpy_s(srcsrc, sizeof(char)*(2*srcLen+1) , src);strcat_s(srcsrc, sizeof(char)*(2*srcLen+1) , src);if(strstr(srcsrc,dst))flag = true;delete []srcsrc;return flag;}
解法三:不需申请过多的空间,直接循环src,当循环到尾部时,跳转到头部即可
//解法三:直接依照src首尾相连进行遍历bool findStr(char src[],char dst[], int srcLen , int dstLen){bool flag = false;for(int i=0 ; i<srcLen ; i++){if(src[i] == dst[0]){//寻找首字母匹配flag = true;for(int j=1 ; j<dstLen ; j++){if(src[(i+j)%srcLen] != dst[j]){flag = false;break;}}}if(flag == true)//找到了这样的子序列,跳出循环break;}return flag;}
0 0
- [编程之美] PSet3.1 字符串移位包含的问题
- 编程之美---->字符串移位包含问题
- 编程之美之字符串移位包含的问题
- 《编程之美》3.1 字符串移位包含的问题
- [编程之美3.1]字符串移位包含的问题
- 字符串移位包含的问题(编程之美)
- 【编程之美】字符串移位包含的问题
- 编程之美--3.1字符串移位包含的问题
- 编程之美3.1 字符串移位包含的问题
- 3.1- 编程之美-字符串移位包含的问题
- 编程之美------3.1 字符串移位包含的问题
- 字符串移位包含的问题(编程之美)
- 编程之美 3.1 字符串移位包含的问题
- 编程之美第三章-字符串移位包含的问题
- 编程之美 3.1字符串移位包含的问题
- 编程之美-字符串移位包含的问题
- 《编程之美》--字符串移位包含的问题
- 编程之美-字符串移位包含的问题
- HDU 2222 Keyword Search AC自动机模板
- makefile 编写,编译动态库,编译静态库
- 设置自动启动和停止oracle实例
- c语言字符串与整数之间的转换
- Tomcat 7.0+Solr4.9部署
- [编程之美] PSet3.1 字符串移位包含的问题
- Java线程(六):线程池
- SQL SERVER SQLOS的任务调度
- c++迭代器
- 一个简单的加密(java语言实现)
- HDU 4912 Paths on the tree (LCA+贪心)
- 【BJOI 2014】总结
- java 局部内部类
- java实现k-means算法