求一個字符串中連續出現次數最多的子串


舉個例子說明一下:例如找到字符串mainStr="abcabcabcde"中連續出現次數最多的子串,可以看出"abc"出現3次,是出現次數最多的子串。對於該題可以用窮舉法,一一列舉每個子串連續出現的最大次數。

如下圖1,對於每一個子串都從當前位置i=pos1(子串開始位置)進行遍歷,其中j=pos2為子串結束的位置。那么offset=pos2-pos1即為當前子串的長度,如果mainStr.substr(i,offset) == mainStr.substr(j,offset)則按照該offset偏移量從k=pos2+offset處開始遍歷,每次增加offset個長度直至字符串結尾。當mainStr.substr(i,offset) == mainStr.substr(k,offset)時,表示出現連續相同的子串,否則break跳出當前循環。繼續從j+1位置處繼續循環執行。

看代碼:

void findMaxSubStr(const string& mainStr, string& maxSubStr,int &maxCounts)
{
    int len = mainStr.length();
    for (int i = 0; i < len; i++)
    {
        for (int j = i + 1; j < len; j++)
        {
            int counts = 1;
            int offset = j - i;
            if (mainStr.substr(i, offset) == mainStr.substr(j, offset))
            {
                counts++;
            }
            else
                continue;
            for (int k = j + offset; k < len; k += offset)
            {
                if (mainStr.substr(i, offset) == mainStr.substr(k, offset))
                {
                    counts++;
                }
                else
                    break;
            }

            if (maxCounts < counts)
            {
                maxCounts = counts;
                maxSubStr = mainStr.substr(i, offset);
            }
        }
    }
}

 

圖1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM