class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param b int整型vector<vector<>>
* @param a int整型vector<vector<>>
* @return int整型vector
*/
int tree[100005][12];
int pass[100005];
int cnt = 1;
int getind(char ch)
{
if (ch >= '0' && ch <= '9')
{
return ch - '0';
}
else if (ch == '-')
{
return 10;
}
else if( ch == '#')
{
return 11;
}
return -1;
}
void insert(string s)
{
int t = 1;
pass[t]++;
for (int i = 0; i < s.size(); i++)
{
int curr = getind(s[i]);
if (tree[t][curr] == 0)
{
tree[t][curr] = ++cnt;
}
t = tree[t][curr];
pass[t]++;
}
}
int count(string s)
{
int t = 1;
for (int i = 0; i < s.size(); i++)
{
int curr = getind(s[i]);
if (tree[t][curr] == 0)
{
return 0;
}
t = tree[t][curr];
}
return pass[t];
}
vector<int> countConsistentKeys(vector<vector<int> >& b, vector<vector<int> >& a)
{
for (auto v : a)
{
string temp;
for (int i = 1; i < v.size(); i++)
{
temp += (to_string(v[i] - v[i - 1]) + '#');
}
insert(temp);
}
vector<int> ans;
for (auto v : b)
{
int cs = 0;
string temp;
for (int i = 1; i < v.size(); i++)
{
temp += (to_string(v[i] - v[i - 1]) + '#');
}
cs += count(temp);
ans.push_back(cs);
}
return ans;
}
};