#include <iostream> #include <algorithm> #include <cstring> #include <map> using namespace std; int ans; map<string, string> mp; int main() { string tmp; cin >> tmp; for (int i = 0; i < tmp.size() - 7; i ++) { string str = ""; for (int j = i; j < i + 8; j ++) str += tmp[j]; mp[str] = str; } int n; cin >> n; while(n --) { string s; cin >> s; sort(s.begin(), s.end()); do if(mp.count(s)) ans ++; while(next_permutation(s.begin(), s.end())); } cout << ans << endl; return 0; }解释
时间: 2024-04-01 15:31:34 浏览: 58
#include_iostream.h_
4星 · 用户满意度95%
这段代码实现的是一个密码匹配功能。具体实现步骤如下:
1.读入一个字符串tmp,将其所有长度为8的子串存储到一个map中。这里使用了两层循环,外层循环i从0到tmp.size()-7,内层循环j从i到i+7,将tmp中从i到i+7的子串存储到map中。
2.读入一个整数n,表示后面还有n个字符串需要匹配。
3.进入一个while循环,循环n次。每次循环中,读入一个字符串s,将其排序后,通过枚举其所有排列,检查是否在之前存储的map中出现过。如果出现过,将答案ans加1。
4.最后输出ans即为答案。
这段代码的核心思想是将所有长度为8的子串存储到一个map中,然后通过排序和枚举排列的方法来匹配输入的字符串。时间复杂度为O(n*8!*log(8!)),其中n为输入的字符串个数。
阅读全文