输入包括两行,第一行一个字符串,代表str1,第二行也是一个字符串,代表str2。
输出str1的字串中含有str2所有字符的最小字符串长度,如果不存在请输出0。
abcde ac
3
“abc”中包含“ac”,且“abc”是所有满足条件中最小的。
12345 344
0
#include <stdio.h> #include <string.h> #include <limits.h> #define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) #define MAX_LEN 100001 int min_len(char *str1, char *str2); int main(void) { char str1[MAX_LEN], str2[MAX_LEN]; scanf("%s%s", str1, str2); printf("%d\n", min_len(str1, str2)); return 0; } int min_len(char *str1, char *str2) { int len1 = (int) strlen(str1); int len2 = (int) strlen(str2); int map[256]; memset(map, 0, sizeof(int) * 256); for (int i = 0; i < len2; i++) { map[str2[i]]++; } int min_len = INT_MAX, need = len2; int l = 0, r = -1; while (++r < len1) { map[str1[r]]--; if (map[str1[r]] >= 0) need--; if (need == 0) { while (map[str1[l]] < 0) { map[str1[l++]]++; } min_len = MIN(min_len, r - l + 1); } } return min_len != INT_MAX ? min_len : 0; }