#include <iostream>
#include <string>
#include <set>
#include <algorithm>
using namespace std;
int longestValidSubstring(const string& s, int k) {
int n = s.length();
multiset<char> st;
int i = 0;
int j = 0;
int maxLength = 0;
while (j < n) {
// Expand the window by adding the current character
st.insert(s[j]);
// Shrink the window from the left if the max difference exceeds k
while (*st.rbegin() - *st.begin() > k) {
st.erase(st.find(s[i]));
++i;
}
// Update the maximum length found so far
maxLength = max(maxLength, j - i + 1);
j++;
}
return maxLength;
}
int main() {
// Example 1
string s1 = "abdfa";
int k1 = 2;
cout << "String: " << s1 << ", k = " << k1 << "\n";
cout << "Longest Valid Substring Length: " << longestValidSubstring(s1, k1) << "\n\n";
// Explanation: "ab" (diff 1), "bd" (diff 2), "df" (diff 2) are valid. Max length is 2.
// Example 2
string s2 = "edcba";
int k2 = 2;
cout << "String: " << s2 << ", k = " << k2 << "\n";
cout << "Longest Valid Substring Length: " << longestValidSubstring(s2, k2) << "\n";
// Explanation: "edc" (diff 'e'-'c' = 2), "dcb" (diff 2), "cba" (diff 2). Max length is 3.
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBsb25nZXN0VmFsaWRTdWJzdHJpbmcoY29uc3Qgc3RyaW5nJiBzLCBpbnQgaykgewogICAgaW50IG4gPSBzLmxlbmd0aCgpOwogICAgbXVsdGlzZXQ8Y2hhcj4gc3Q7CiAgICBpbnQgaSA9IDA7CiAgICBpbnQgaiA9IDA7CiAgICBpbnQgbWF4TGVuZ3RoID0gMDsKCiAgICB3aGlsZSAoaiA8IG4pIHsKICAgICAgICAvLyBFeHBhbmQgdGhlIHdpbmRvdyBieSBhZGRpbmcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyCiAgICAgICAgc3QuaW5zZXJ0KHNbal0pOwoKICAgICAgICAvLyBTaHJpbmsgdGhlIHdpbmRvdyBmcm9tIHRoZSBsZWZ0IGlmIHRoZSBtYXggZGlmZmVyZW5jZSBleGNlZWRzIGsKICAgICAgICB3aGlsZSAoKnN0LnJiZWdpbigpIC0gKnN0LmJlZ2luKCkgPiBrKSB7CiAgICAgICAgICAgIHN0LmVyYXNlKHN0LmZpbmQoc1tpXSkpOwogICAgICAgICAgICArK2k7CiAgICAgICAgfQoKICAgICAgICAvLyBVcGRhdGUgdGhlIG1heGltdW0gbGVuZ3RoIGZvdW5kIHNvIGZhcgogICAgICAgIG1heExlbmd0aCA9IG1heChtYXhMZW5ndGgsIGogLSBpICsgMSk7CiAgICAgICAgaisrOwogICAgfQoKICAgIHJldHVybiBtYXhMZW5ndGg7Cn0KCmludCBtYWluKCkgewogICAgLy8gRXhhbXBsZSAxCiAgICBzdHJpbmcgczEgPSAiYWJkZmEiOwogICAgaW50IGsxID0gMjsKICAgIGNvdXQgPDwgIlN0cmluZzogIiA8PCBzMSA8PCAiLCBrID0gIiA8PCBrMSA8PCAiXG4iOwogICAgY291dCA8PCAiTG9uZ2VzdCBWYWxpZCBTdWJzdHJpbmcgTGVuZ3RoOiAiIDw8IGxvbmdlc3RWYWxpZFN1YnN0cmluZyhzMSwgazEpIDw8ICJcblxuIjsKICAgIC8vIEV4cGxhbmF0aW9uOiAiYWIiIChkaWZmIDEpLCAiYmQiIChkaWZmIDIpLCAiZGYiIChkaWZmIDIpIGFyZSB2YWxpZC4gTWF4IGxlbmd0aCBpcyAyLgoKICAgIC8vIEV4YW1wbGUgMgogICAgc3RyaW5nIHMyID0gImVkY2JhIjsKICAgIGludCBrMiA9IDI7CiAgICBjb3V0IDw8ICJTdHJpbmc6ICIgPDwgczIgPDwgIiwgayA9ICIgPDwgazIgPDwgIlxuIjsKICAgIGNvdXQgPDwgIkxvbmdlc3QgVmFsaWQgU3Vic3RyaW5nIExlbmd0aDogIiA8PCBsb25nZXN0VmFsaWRTdWJzdHJpbmcoczIsIGsyKSA8PCAiXG4iOwogICAgLy8gRXhwbGFuYXRpb246ICJlZGMiIChkaWZmICdlJy0nYycgPSAyKSwgImRjYiIgKGRpZmYgMiksICJjYmEiIChkaWZmIDIpLiBNYXggbGVuZ3RoIGlzIDMuCgogICAgcmV0dXJuIDA7Cn0=