这个问题可能会重复,但由于我无法找到我想要的解决方案,因此我发布了这个问题。 如果输入字符串是“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;
}
答案 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
,这将是您的答案。
答案 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;
}