最长唯一子字符串
Longest unique substring
这个问题似乎是重复的,但我张贴它,因为我不能找到我想要的解决方案。如果输入字符串是"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;
}
假设这是一个学习练习,下面是如何修改算法以找到最长唯一子字符串的方法。
首先确定代码中修改maxLen
的位置。有三个:
- 设置为0的位置,
- 设置为
max(maxLen, j-i)
的位置,和 - 设置为
max(maxLen, n-i)
的位置
将maxLen
替换为maxStr
,并按如下方式使用:
- 将赋值0替换为赋值给空字符串,
- 将
max(maxLen, j-i)
的赋值替换为检查maxStr.length() < (j-i)
,并将maxStr
设置为s
的子字符串,从i
(含)到j
(不含) - 将
max(maxLen, n-i)
的赋值替换为检查maxStr.length() < (n-i)
,并将maxStr
设置为s
的子字符串,从i
包含到n
,不包含
返回maxStr
,这将是您的答案。
演示。
/*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;
}
相关文章:
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 从映射<字符串、矢量中对唯一值进行排序<string>>
- 更快的字符串比较排序,用于唯一()
- 为字符串中的每个字符(不是字符位置!)分配唯一的索引
- 检查字符串是否仅包含使用.at(int)的唯一字符
- 字符串单词的唯一哈希值
- 将唯一值转移到左侧,并在字符串中删除重复的值
- 在文本中的两个非唯一字符串之间获取子弦
- 使用哈希 C++ 查找具有 k 个不同/唯一字符的最长子字符串
- 从C 中的两个字符串中找到唯一的常见单词
- 以 C++ 为单位计算字符串中的唯一单词
- 检查字符串是否具有C++中的所有唯一字符
- 如何从长度为 n 的字符串中获取 lengh k 的所有唯一排列的数量
- 如何计算出现在字符串和输出行中的唯一单词?C
- 仅威胁唯一字符串 - 什么是更快的 vector<std::string> 或只是 std::string
- c++需要字符串的唯一ID,但无论顺序如何都必须相同
- C++预处理器确保字符串全局唯一
- 使用 std::unique_copy 从向量中提取不区分大小写的唯一字符串
- 计算数组中唯一字符串的数量