class Solution { #define N 2000010 public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param b int整型vector<vector<>> * @param a int整型vector<vector<>> * @return int整型vector */ class TireTree { public: int cnt = 1, pass[N] = {0}, tree[N][12] = {0}; int get(char val) { if (val == '#') return 10; else if (val == '-') return 11; return val - '0'; } void insert(string word) { int cur = 1; pass[cur]++; for (int i = 0; i < (int)word.size(); i++) { int path = get(word[i]); if (tree[cur][path] == 0) tree[cur][path] = ++cnt; cur = tree[cur][path]; pass[cur]++; } } int count(string word) { int cur = 1; for (int i = 0; i < (int)word.size(); i++) { int path = get(word[i]); if (tree[cur][path] == 0) return 0; cur = tree[cur][path]; } return pass[cur]; } }; vector<int> countConsistentKeys(vector<vector<int> >& b, vector<vector<int> >& a) { TireTree tire; vector<int> ans; for (int i = 0; i < a.size(); i++) { string s = ""; for (int j = 1; j < a[i].size(); j++) { s += to_string(a[i][j] - a[i][j - 1]) + "#"; } tire.insert(s); // 将s加入 } for (int i = 0; i < b.size(); i++) { string s = ""; for (int j = 1; j < b[i].size(); j++) { s += to_string(b[i][j] - b[i][j - 1]) + "#"; } ans.push_back(tire.count(s)); } return ans; } };