题解 | #接头密匙#
接头密匙
https://www.nowcoder.com/practice/c552d3b4dfda49ccb883a6371d9a6932
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; } };