c_cpp 由最大不同字符组成的最小子字符串的长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 由最大不同字符组成的最小子字符串的长度相关的知识,希望对你有一定的参考价值。

//https://www.geeksforgeeks.org/smallest-window-contains-characters-string/
#include<iostream>
using namespace std;

int func (string s) {
    int n= s.length();
    int m[256]= {0};
    int d_count= 0;
    for (int i=0;i<n;i++) {
        m[s[i]]++;
        if (m[s[i]]== 1)
            d_count++;
    }
    int maxi=n+2, count= 0, start= 0, sIndex;
    int pat[256]= {0};
    for (int i=0;i<n;i++) {
        pat[s[i]]++;
        if (pat[s[i]]== 1)
            count++;
        if (count== d_count) {
            while (pat[s[start]]>1) {
                if (pat[s[start]]> 1)
                    pat[s[start]]--;
                start++;
            }
            int curr= i-start+ 1;
            if (maxi>curr) {
                maxi= curr;
                sIndex= start;
            }
        }
    }
    string str= s.substr (sIndex, maxi);
    cout<< str<< " ";
    return maxi;
}

int main()
{
    /*2
aabcbcdbca
aaab*/
    int t;
    cin>>t;
    cin>> ws;
    while (t-- >0) {
        string s;
        getline (cin, s);
        cout<< func (s)<< endl;
    }
	return 0;
}

以上是关于c_cpp 由最大不同字符组成的最小子字符串的长度的主要内容,如果未能解决你的问题,请参考以下文章

算法题-第K个小子串

406. 和大于S的最小子数组

LeetCode——不同字符的最小子序列/去除重复字母

每日一练(day05)

[程序员代码面试指南]字符串问题-找到包含串b所有字符的最小子串

c_cpp 按字典顺序排列的最小子串,以元音开头,以辅音结束