代码memory limit exceeded 里面的循环没懂 请大佬们讲解一下

tc203 2023-10-30 15:18:36

#include <iostream>
using namespace std;
int main()
{
   
    string s,s1,s2;
    char c;
    while(cin>>c,c!=',') s+=c;
    while(cin>>c,c!=',') s1+=c;
    while(cin>>c) s2+=c;
     if(s.size()<s1.size()||s.size()<s2.size())
    puts("-1");
    else
    {
    int l;
    for(;l+s1.size()<s.size();l++)
    {
        int k=0;
        while(k<s1.size())
        {
            if(s[l+k]!=s1[k])break;//这块的break之后的k++还读吗 是怎么循环的没看懂 请哪位大佬解答一下
        k++;
        }
    if(k==s1.size()) break;
    }
    int r=l+s1.size();
    while(s2.size()<s.size()-r-s1.size())
    {
        int j=0;
        for(;j<s2.size();j++)
        {
            if(s[r+j]!=s2[j]) break;
        }
        if (j==s2.size()) break;//这块也是不知道怎么循环的
    r++;
    }
    l+=s1.size()-1;
    if(l>=r||l+s1.size()>r)puts("-1");
    else printf("%d/n",r-l-1);
    return 0;
    }
}

...全文
225 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪落之下 2023-11-03
  • 打赏
  • 举报
回复

这段代码的主要目的是在给定字符串s中查找两个子字符串s1s2,然后计算它们之间的字符数量。下面是对代码中两个关键循环的解释:

  1. 第一个循环:

    for(;l+s1.size()<s.size();l++)
    {
        int k=0;
        while(k<s1.size())
        {
            if(s[l+k]!=s1[k])break;
            k++;
        }
        if(k==s1.size()) break;
    }
    

    这个循环的目的是找到s中第一个子字符串s1的起始位置。它会从s的开头逐个字符检查,如果在s1的可能起始位置找到了与s1匹配的字符,就进入内部的while循环。在内部的while循环中,它会继续检查下一个字符是否匹配,如果匹配,k会递增,否则循环终止。如果在内部的while循环结束时,k等于s1的长度,说明找到了s1的起始位置,此时跳出外部的for循环。

  2. 第二个循环:

    int r=l+s1.size();
    while(s2.size()<s.size()-r-s1.size())
    {
        int j=0;
        for(;j<s2.size();j++)
        {
            if(s[r+j]!=s2[j]) break;
        }
        if (j==s2.size()) break;
        r++;
    }
    

    这个循环的目的是找到s中第二个子字符串s2的起始位置。首先,它计算s1的结束位置r,然后从sr位置开始检查字符。在内部的for循环中,它会继续检查下一个字符是否匹配s2,如果匹配,j会递增,否则循循环终止。如果在内部的for循环结束时,j等于s2的长度,说明找到了s2的起始位置,此时跳出外部的while循环。

总结:这两个循环的目的是从字符串s中查找子字符串s1s2的起始位置,并计算它们之间的字符数量。第一个循环找s1,第二个循环找s2。循环中使用break语句来提前结束循环,如果找到了匹配的子字符串,就会退出循环。

10

社区成员

发帖
与我相关
我的任务
社区描述
Docker
javascriptgolangdevops 个人社区
社区管理员
  • 甜点cc
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧