这段代码的性能高在哪里了?

代码1:


bool judge(string*strs , int* positions , int n , int k)

{

    string s ;

    for(int i=0 ; i<n  ;i++)

        s+=strs[positions[i]] ;


    string tmp = s ;


    int count = 1 ;


    for(int i=1 ; i<(s.length()/2+1) ; i++)

    {

        tmp = tmp.substr(1) + tmp[0] ;

        if(tmp == s)

        {

             count = s.length()/(i) ;

             break ;

        }

    }


    return count == k ;

}

代码2:


bool judge(string*strs , int* positions , int n , int k)

{

    string str = "" ;

    

    for(int i=0 ; i<n  ;i++)

        str+=strs[positions[i]] ;


    int count = 1 ;

    int length = str.length() ;

    for(int offset=1 ; offset<=(length/2+1) ; offset++)

    {

        int start = 0 ;

        int offStart = offset ;

        bool flag = true ;

        for( ; start<length ; )

        {

            if(str[start] == str[offStart])

            {

                start++ ;

                offStart = (offStart+1)%length ;

            }

            else

            {

                flag = false ;

                break ;

            }

        }


        if(flag)

        {

            count = length/offset ;

            break ;

        }

    }


    return (count == k) ;

}

这两段代码中第一段是我在网上AC一道题的时候参考的, 第二段是我自己写的, 作用是用于比较一个字符串偏移若干位之后是否和原串相同.

第一段就可以ac, 第二段就运行超时了.


我想知道的是第一段代码的性能高在哪里了?


//我主要写的代码是java的, 用java ac不过, 才切C++写...对C++不是很熟练


莫回无
浏览 280回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java