c++ - 最长唯一子串

标签 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;
}

最佳答案

假设这是一个学习练习,下面是您如何修改算法以找到最长的唯一子串。

首先确定代码中修改 maxLen 的位置.一共有三个:

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

替换maxLenmaxStr ,并按如下方式使用它:

  • 用对空字符串的赋值替换对零的赋值,
  • 将分配替换为 max(maxLen, j-i)用支票maxStr.length() < (j-i) ,并设置 maxStrs 的子串来自 i , 含, 到 j , 独家
  • 将分配替换为 max(maxLen, n-i)用支票maxStr.length() < (n-i) ,并设置 maxStrs 的子串来自 i , 含, 到 n , 独家

返回maxStr ,这就是您的答案。

Demo.

关于c++ - 最长唯一子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25080300/

相关文章:

c++ - 如何在 Ruby/C++ 中制作图片故事类型的游戏?

regex - Linux使用命令行删除字符前后的单个下划线

string - 如何在 Go 中将 int 值转换为字符串?

c# - PHP 相当于 C# string.IsNullOrEmpty 方法?

c++ - 当函数缺少返回值时,编译器会生成警告而不是错误?

c++ - C++ Primer Plus 6th 第 3 章 - 关于如何使用通用字符名

python - 正则表达式在关键字后查找工作

c - 在 C 中修改字符串数组中的字符串

c# - 从 C# 中的 C++ 函数返回数组和结构

c++ - 为什么可变说明符被分类为存储类说明符,而不是限定符?