最长的独特子串

时间:2014-08-01 12:29:13

标签: c++ string

这个问题可能会重复,但由于我无法找到我想要的解决方案,因此我发布了这个问题。 如果输入字符串是“abcaadafghae”,我想要第一个最长的唯一子字符串(没有重复的字符),它应该是“dafgh”。我得到了下面的程序来查找这个子串的长度是5,但我希望子串本身作为输出。

提前致谢。

int lengthOfLongestSubstring(string s) {
  int n = s.length();
  int i = 0, j = 0;
  int maxLen = 0;
  bool exist[256] = { false };
  while (j < n) {
    if (exist[s[j]]) {
      maxLen = max(maxLen, j-i);
      while (s[i] != s[j]) {
        exist[s[i]] = false;
        i++;
      }
      i++;
      j++;
    } else {
      exist[s[j]] = true;
      j++;
    }
  }
  maxLen = max(maxLen, n-i);
  return maxLen;
}

2 个答案:

答案 0 :(得分:3)

假设这是一个学习练习,您可以通过以下方法修改算法以找到最长的唯一子字符串。

首先确定代码中修改maxLen的位置。其中有三个:

  • 您将其设置为零的地方,
  • 您将其设置为max(maxLen, j-i)
  • 的位置
  • 您将其设置为max(maxLen, n-i)
  • 的位置

maxLen替换为maxStr,并按如下方式使用:

  • 将赋值为零,并赋值为空字符串,
  • 使用支票max(maxLen, j-i)将作业替换为maxStr.length() < (j-i),并将maxStr的{​​{1}}的子字符串从s设置为i ,独家
  • 使用支票j将作业替换为max(maxLen, n-i),并将maxStr.length() < (n-i)的{​​{1}}的子字符串从maxStr设置为s ,独家

返回i,这将是您的答案。

Demo.

答案 1 :(得分:0)

/*C++ program to print the largest substring in a string without repetation of character.
eg. given string :- abcabbabcd
largest substring possible without repetition of character is abcd.*/

     #include<bits/stdc++.h>
     using namespace std;
     int main()
     {
      string str,str1;
      int max =0;
      string finalstr;
      vector<string> str2;
      cin>>str;
    int len = str.length();
    for(int i=0;i<len;i++)
    {
        if(str1.find(str[i]) != std::string::npos)
        {
            str2.push_back(str1);
            char p = str[i];
            str1 = "";
            i--;
            while(p!=str[i])
                i--;
        }
        else
            str1.append(str,i,1);
    }
    str2.push_back(str1);

    for(int i=0;i<str2.size();i++)
    {
        if(max<str2[i].length()){
            max = str2[i].length();
            finalstr  = str2[i];
        }
    }
    cout<<finalstr<<endl;
}