c++判断字符串s1s是否是S2的子串,是的话S1在S2的起始位置,返之返回-1到主程序

这个是函数开头:intString::substring(String&a)求大神帮忙,想了一天了... 这个是函数开头:int String::substring(String&a) 求大神帮忙,想了一天了 展开
 我来答
GTA小鸡
高粉答主

2018-02-24 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
暴力求解法就是从s2[0]开始到s2[s2.length()-s1.length()]为止,逐一作为子串起始位置和s1比较是否相同,相同则返回下标。
想要最低时间复杂度可以了解一下KMP算法。
更多追问追答
追问
暴力求解法怎么求,,能写出来看看吗大哥
追答
int subString(const string &s1, const string &s2)
{
    const size_t l1=s1.size();
    const size_t l2=s2.size();
    
    if(l1>l2) return -1;
    
    for(size_t i=0;i<=l2-l1;++i)
    {
        size_t j;
        for(j=0;j<l1&&s1[j]==s2[i+j];++j);
        if(j==l1) return (int)i; //假设字符串长度不会超过int范围 
    }
    return -1;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式