diff --git a/0076_minimum_window_substring/window_substring.c b/0076_minimum_window_substring/window_substring.c index 41f5d0b..792e898 100644 --- a/0076_minimum_window_substring/window_substring.c +++ b/0076_minimum_window_substring/window_substring.c @@ -18,31 +18,31 @@ static char *minWindow(char *s, char *t) int i, j, count[256] = { 0 }; int slen = strlen(s); int tlen = strlen(t); + /* edges of sliding window */ + int l = 0, r = 0; + int min_len = slen + 1; + int start = 0; + int chars_to_meet = 0; + for (i = 0; i < tlen; i++) { count[t[i]]++; } - /* edges of sliding window */ - int lo = 0, hi = 0; - int min_len = slen + 1; - int start = 0; - int chars_to_meet = tlen; - while (hi < slen) { - if (--count[s[hi++]] >= 0) { + while (r < slen) { + if (--count[s[r++]] >= 0) { /* pattern found */ - chars_to_meet--; + chars_to_meet++; } - while (chars_to_meet == 0) { - if (hi - lo < min_len) { - min_len = hi - lo; - start = lo; + while (chars_to_meet == tlen) { + if (r - l < min_len) { + min_len = r - l; + start = l; } /* Chars with negative count are not included in the pattern string */ - if (++count[s[lo++]] > 0) { - /* chars_to_meet == 1 */ - chars_to_meet++; + if (++count[s[l++]] > 0) { + chars_to_meet--; } } } diff --git a/0438_find_all_anagrams_in_a_string/anagrams_in_string.c b/0438_find_all_anagrams_in_a_string/anagrams_in_string.c index 9a3ec67..f780591 100644 --- a/0438_find_all_anagrams_in_a_string/anagrams_in_string.c +++ b/0438_find_all_anagrams_in_a_string/anagrams_in_string.c @@ -5,23 +5,26 @@ /** * Note: The returned array must be malloced, assume caller calls free(). */ -int* findAnagrams(char * s, char * p, int* returnSize){ +int* findAnagrams(char * s, char * p, int* returnSize) +{ *returnSize = 0; int *res = malloc(11000 * sizeof(int)); int i, pat_len = 0; int count[128] = { 0 }; + int l = 0, r = 0, len = 0; + for (i = 0; p[i] != '\0'; i++) { count[p[i]]++; } pat_len = i; - int l = 0, r = 0, len = 0; while (s[r] != '\0') { if (--count[s[r++]] >= 0) { len++; } - if (r - l >= pat_len) { - if (len == pat_len) { + + while (len >= pat_len) { + if (r - l == pat_len) { res[(*returnSize)++] = l; } if (++count[s[l++]] > 0) { diff --git a/0516_longest_palindromic_subsequence/lps.c b/0516_longest_palindromic_subsequence/lps.c index b8518b9..9972a01 100644 --- a/0516_longest_palindromic_subsequence/lps.c +++ b/0516_longest_palindromic_subsequence/lps.c @@ -13,6 +13,9 @@ int longestPalindromeSubseq(char * s) int i, j, k; int len = strlen(s); int **dp = malloc(len * sizeof(int *)); + + /* The dp array indicates the length of palindrome subsequence of + * nums[i...j] */ for (i = 0; i < len; i++) { dp[i] = malloc(len * sizeof(int)); memset(dp[i], 0, len * sizeof(int)); diff --git a/0567_permutation_in_string/permutation_in_string.c b/0567_permutation_in_string/permutation_in_string.c index a20fa55..bdb4ea8 100644 --- a/0567_permutation_in_string/permutation_in_string.c +++ b/0567_permutation_in_string/permutation_in_string.c @@ -6,19 +6,21 @@ bool checkInclusion(char * s1, char * s2) { - int i, count[128] = { -1 }, pat_len = 0; + int i, count[128] = { 0 }, pat_len; + int l = 0, r = 0, len = 0; + for (i = 0; s1[i] != '\0'; i++) { count[s1[i]]++; - pat_len++; } + pat_len = i; - int l = 0, r = 0, len = 0; while (s2[r] != '\0') { if (--count[s2[r++]] >= 0) { len++; } - while (r - l >= pat_len) { - if (len == pat_len) { + + while (len >= pat_len) { + if (r - l == pat_len) { return true; } if (++count[s2[l++]] > 0) {