算法导论习题32.1-4解答
来源:互联网 发布:电脑唱歌软件 编辑:程序博客网 时间:2024/06/04 11:45
从一个参考书上得到的求解算法,描述如下:
To determine if a pattern P with gap characters exists in T partition P into substrings P1, ..., Pk determined by the gap characters. Search for P1 and if found continue searching for P2 and so on. This clearly find a pattern if one exists.
由以上思路不难写出代码,如下:
#include <iostream>#include <cstring>using namespace std;//使用朴素的字符串比较算法,返回第一个匹配的起始地点,若没有则为NULLconst char* findFirstContainMatch(const char* text, const char* pattern){ int textLen = strlen(text); int patternLen = strlen(pattern); for(int s = 0; s <= textLen - patternLen; ++s){ int i =0; for(; i < patternLen; ++i){ if(text[s+i] != pattern[i]){ break; } } //包含 if(i == patternLen){ return (text + s); } } return NULL;}bool isSubStr(const char* text, const char* pattern){ while(true){ //找到某个不包含分隔符的子串的开始处 for(; *pattern == '*'; ++pattern); cout<<*pattern <<" "; if(*pattern == '\0'){ return true; } //找到第一个相匹配的地方 for(; *text != '\0' && *text != *pattern; ++text); if(*text == '\0'){ return false; } //统计当前模式中下一个不包含分隔符的子串的长度 unsigned patternLen = 0; for(const char* temp = pattern; *temp != '\0' && *temp != '*'; ++temp){ ++patternLen; } //将模式中某个不包含分隔符的子串提取出来 char* subStr = new char[patternLen+1]; subStr[patternLen] = '\0'; strncpy(subStr, pattern, patternLen); if((text = findFirstContainMatch(text, subStr)) == NULL){ return false; } //开始匹配下一个子串 pattern = pattern + patternLen; text = text + patternLen; delete[] subStr; } return false;}int main(){ char text[] = "cabccbacbacba"; char pattern[] = "****abcc*b*a*c*b*b*a"; cout << (isSubStr(text, pattern) ? "find it!" : "not find!") <<endl; return 0;}
- 算法导论习题32.1-4解答
- 【通告】算法导论习题解答
- 算法导论习题4-1-5 python解答
- 算法导论动态规划课后习题解答
- 算法导论习题15.5-1解答
- 算法导论第三版4.1习题解答
- 算法导论课后习题部分解答
- 随机排列算法及《算法导论》5.3节习题解答
- Introduction to Algorithms 算法导论 第4章 递归式 学习笔记及习题解答
- 算法导论(3版)第4章习题的部分解答
- 《算法导论》习题解答 Chapter 22.1-4(去除重边)
- 算法导论第二章部分习题自我解答
- 算法导论 第7章部分习题解答
- 《算法导论》习题解答搬运&&学习笔记 索引目录
- 《算法导论》习题解答 Chapter 22.1-3(转置图)
- 《算法导论》 - 第6章 - 堆排序 - 习题解答
- 算法导论 习题 5.4-4
- 算法导论 习题2.1-4
- 关于文件读写操作中ios::app与ios::ate的区别
- hdu 1012 u Calculate e
- 9、multiple reactors + thread pool(one loop per thread + threadpool)(突发I/O与密集计算)
- 使用ContentResolver操作ContentProvider中的数据
- 题目1361:翻转单词顺序-九度
- 算法导论习题32.1-4解答
- 科学存储数据格式-HDF5
- Minimum Window Substring
- Makefile中=与:=的区别
- hdu2647 Reward(拓扑排序)
- 线性表链式存储
- 给任务的执行人动态的赋值
- POJ 1410 Intersection
- Java学习总结之贪吃蛇项目程序分析