用Qt写出给定一个字符串s,请找出其中不含有重复字符的最长长串的长度,每行一个字符串,最后一个字符串未尾加上“,”作为结束标志,按照顺序输出每行一个最长子串的长度。
时间: 2023-10-14 07:13:11 浏览: 87
以下是使用C++和Qt实现的代码:
```cpp
#include <QCoreApplication>
#include <QString>
#include <QSet>
int lengthOfLongestSubstring(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);
// 输入字符串,以逗号结尾
QStringList inputs;
QString input;
while ((input = QString::fromUtf8(qgetenv("LINE"))).endsWith(",")) {
input.chop(1);
inputs << input;
}
// 计算每个字符串的最长子串长度并输出
for (const QString& s : inputs) {
int length = lengthOfLongestSubstring(s);
qDebug("%d", length);
}
return a.exec();
}
```
该程序首先读取输入的一行字符串,并使用`lengthOfLongestSubstring`函数计算最长不含重复字符的子串长度。该函数使用了双指针滑动窗口算法,用一个集合记录窗口中出现过的字符,并动态调整窗口大小。最后,程序输出每个字符串的最长子串长度,直到读取到以逗号结尾的最后一行字符串。
阅读全文