对子串的判定(求解)

问题相关代码,请勿粘贴截图

using namespace std;

int main(){

string str;
while(cin >> str,str !="."){

    for(int i = 1;i<=str.size();i++){

        int y = str.size()%i;
        // cout << str.size() << endl;
        if(y == 0){
            int n = str.size()/i;
            string res="";
            string s =  str.substr(0,i);

            for(int j = 0;j< n;j++) res+=s;
            // cout << res <
            
            if(res == str){
                cout << n << endl;
                break; 
            }

        }
    }

}

system("pause");
return 0; 

}

运行结果及报错内容

超时

我的解答思路和尝试过的方法

在CSDN搜索

我想要达到的结果

AC

没过

用string,substr效率低下,直接定义char数组,用游标逐个匹配

#include <iostream>
using namespace std;
int main()
{
    char s1[1000],s2[1000];
    cin>>s1>>s2;
    int i=0,j=0,k=0;
    while(s1[i] != '\0')
    {
        j=0;
        k = i;
        while(s1[k] != '\0' && s2[j] != '\0')
        {
            if(s1[k] != s2[j])
                break;
            k++;
            j++;
        }
        if(s2[j] == '\0')
            break;
        i++;
    }
    if(s1[i] == '\0')
        cout<<"no";
    else
        cout<<"yes";
 
    return 0;
}