C++编写程序求出所给出的字符串中最长的字母子串(以非字母隔开)
时间: 2024-11-04 22:10:40 浏览: 15
编写程序求出所给出的字符串中最长的字母子串(以非字母隔开)。
在C++中,你可以使用动态规划的思想来解决这个问题。这个任务通常被称为“最长无重复字符子串”或“滑动窗口”问题。这里是一个简单的解决方案:
```cpp
#include <iostream>
#include <string>
using namespace std;
string longestSubstringWithoutRepeatingChars(string s) {
int n = s.length();
if (n == 0)
return "";
int start = 0;
unordered_set<char> charSet;
string result = "";
for (int end = 0; end < n; ++end) {
// 如果当前字符已经在集合中,移动起始点到下一个位置并移除旧字符
while (charSet.find(s[start]) != charSet.end()) {
charSet.erase(s[start]);
start++;
}
// 添加当前字符到集合,并更新结果长度
charSet.insert(s[end]);
if (result.length() < end - start + 1)
result = s.substr(start, end - start + 1);
}
return result;
}
int main() {
string input = "abcabcbb";
cout << "Longest substring without repeating chars: " << longestSubstringWithoutRepeatingChars(input) << endl;
return 0;
}
```
在这个函数中,我们维护了一个滑动窗口,其中`start`表示窗口的左边界,`end`表示右边界。遍历过程中,如果遇到重复字符,我们就移动`start`指针直到该字符不在集合中。然后将当前字符添加到集合中,更新最长无重复字符子串的结果。最后返回找到的最长子串。
阅读全文