4 条题解
-
0
我之前没有学过字符串的相关知识,我是一边做题一边看书学出来。所以我觉得我的题解应该可以给像我一样的新手看,给予参考或者启发。 我的思路是,被匹配的字符串的每个字符都去匹配要匹配的字符串的字符,如果匹配到了,就标记被占用。核心思路是这个,然后配上辅助减少计算时间的方法就行了。应该会有更快的算法,但我想了很久想不出来。 下面的代码要用到的没教过的函数(目前)是strlen() (这个函数是我从课本扒出来的,需要<string.h>头文件),这个函数是求字符串长度的。然后其它的都是些课上讲的东西组合起来和我发现的一些小点。
#include <stdio.h> #include <string.h> int get_times(char main_str[], char sub_str[]) { int main_length = strlen(main_str); int sub_length = strlen(sub_str); int times = 0; // 遍历主串 int start = 0; int end = 0; for (int i = 0; i < main_length; i ++) { int match_array[15] = {0}; end = i; if ((end - start) == sub_length) { start += 1; } int match_times = 0; for (int j = start; j <= end; j ++) { for (int k = 0; k < sub_length; k ++) { if (main_str[j] == sub_str[k] && match_array[k] == 0) { match_array[k] = 1; match_times += 1; break; } } } if (match_times == sub_length) { times += 1; } } return times; } int main(void) { int t; int qs = 0; scanf("%d", &t); int times_array[20005] = {0}; int counter = -1; for (int i = 0; i < t; i ++) { char main_str[1005] = {0}; scanf("%s", main_str); int q; scanf("%d", &q); qs += q; for (int j = 0; j < q; j ++) { counter += 1; char sub_str[15] = {0}; scanf("%s", sub_str); times_array[counter] = get_times(main_str, sub_str); } } for (int i = 0; i < qs; i ++) { printf("%d\n", times_array[i]); } return 0; }
信息
- ID
- 196
- 时间
- 4000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 827
- 已通过
- 91
- 上传者