题解 | #包含不超过两种字符的最长子串#

包含不超过两种字符的最长子串

https://www.nowcoder.com/practice/90d6a362fa7d4c519d557da797bb02ce

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int lengthOfLongestSubstringTwoDistinct(const string& s) {
    unordered_map<char, int> charCount;
    int maxLength = 0;
    int left = 0;

    for (int right = 0; right < s.length(); right++) {
        charCount[s[right]]++;  // Increment the count of the character at right

        // While we have more than two distinct characters, move the left pointer
        while (charCount.size() > 2) {
            charCount[s[left]]--;  // Decrement the count of the character at left
            if (charCount[s[left]] == 0) {
                charCount.erase(
                    s[left]);  // Remove the character completely if count goes to zero
            }
            left++;  // Move the left pointer to the right
        }

        // Calculate the current length of the substring
        maxLength = max(maxLength, right - left + 1);
    }

    return maxLength;
}

int main() {
    string input;
    cin >> input;
    cout << lengthOfLongestSubstringTwoDistinct(input) << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务