用Qt编译求无重复字符的最长子串
时间: 2023-10-29 11:07:12 浏览: 32
以下是使用 Qt 编写的无重复字符的最长子串求解程序:
```c++
#include <QCoreApplication>
#include <QString>
#include <QSet>
int lengthOfLongestSubstring(const QString& s) {
int n = s.length();
int ans = 0, i = 0, j = 0;
QSet<QChar> set;
while (i < n && j < n) {
if (!set.contains(s[j])) {
set.insert(s[j++]);
ans = qMax(ans, j - i);
} else {
set.remove(s[i++]);
}
}
return ans;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString s = "abcabcbb";
int len = lengthOfLongestSubstring(s);
qDebug() << "The length of the longest substring without repeating characters is" << len;
return a.exec();
}
```
程序中,我们定义了一个 `lengthOfLongestSubstring` 函数来计算最长的无重复字符的子串长度。在函数中,我们使用了两个指针 `i` 和 `j` 来表示子串的起始位置和结束位置,同时使用了 `QSet` 来存储字符集合。每次移动指针时,我们检查当前字符是否在集合中,如果不在,就将其加入集合并将 `j` 指针向右移动一位,更新最长子串的长度。如果在集合中,就将 `i` 指针向右移动一位,并从集合中删除相应的字符。最后返回最长子串的长度。
在 `main` 函数中,我们定义了一个字符串 `s`,并将其传递给 `lengthOfLongestSubstring` 函数进行计算。最后输出结果。
需要注意的是,本程序中使用了 Qt 的相关类和函数,需要在编译时链接 Qt 库。可以使用 Qt Creator 编写和编译程序,也可以手动使用 qmake 和 make 工具进行编译。