写代码是一种艺术,甚于蒙娜丽莎的微笑!

不拼搏,枉少年!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目描述:在字符串中找到出现相同的并且长度是最长的子串,输出该子串以及其首字符的位置。

例如mainStr="yyabcdabjcabceg",输出为"abc"和3。

分析:每次都找到最大长度的子串,然后正序和逆序查找该子串出现的位置。如果两者位置不相等,则说明两子串是相同的并且长度最长的子串,满足条件。否则继续遍历执行。

bool findSameMaxSubstr(const string& mainStr, string &subStr, int index)
{
    bool isFind = false;
    int len = mainStr.length();
    for (int i = len; i > 1; i--)
    {
        for (int j = 0; j < len; j++)
        {
            int firstIndex = 0;
            int secondIndex = 0;
            if (i + j < len)
            {
                subStr = mainStr.substr(i, j);
                firstIndex = mainStr.find(subStr);
                secondIndex = mainStr.rfind(subStr);
                if (firstIndex != secondIndex)
                {
                    index = firstIndex + 1;
                    return true;
                }
            }

        }
    }
}
posted on 2016-05-13 11:31  RunningSnail  阅读(776)  评论(0编辑  收藏  举报