串的模式匹配
Posted 王小东大将军
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串的模式匹配相关的知识,希望对你有一定的参考价值。
题目描述
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
测试样例:
"acbc",4,"bc",2
返回:2
class StringPattern { public: int findAppearance(string A, int lena, string B, int lenb) { // write code here if(lena<lenb) return -1; int count=0; for(int i=0;i<lena-lenb+1;i++) if(A[i]==B[0]) { if(A.substr(A[i],lenb)==B) { return i; break; } } return -1; } };
段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
terminate called after throwing an instance of ‘std::out_of_range‘
what(): basic_string::substr
class StringPattern { public: int findAppearance(string A, int lena, string B, int lenb) { // write code here return A.find(B); } };
class StringPattern { public: int findAppearance(string A, int lena, string B, int lenb) { // write code here for(int i=0; i<=lena-lenb; i++) { int j = 0; for(; j<lenb; j++) { if(A[i+j] != B[j]) break; } if(j == lenb) return i; } return -1; } };
以上是关于串的模式匹配的主要内容,如果未能解决你的问题,请参考以下文章