package 第03期.mca_08; import java.util.HashMap; // 来自字节飞书团队 // 假设数组a和数组b为两组信号 // 1) length(b) <= length(a) // 2) 对于任意0<=i nexts; public TrieNode() { pass = 0; nexts = new HashMap<>(); } } public static int[] sameTeamsArray(int[][] bs, int[][] as) { TrieNode root = new TrieNode(); TrieNode cur = null; for (int i = 0; i < as.length; i++) { // as[i] -> {4, 7, 3, 9} cur = root; for (int j = 1; j < as[i].length; j++) { int diff = as[i][j] - as[i][j - 1]; if (!cur.nexts.containsKey(diff)) { cur.nexts.put(diff, new TrieNode()); } cur = cur.nexts.get(diff); cur.pass++; } } int[] ans = new int[bs.length]; for (int i = 0; i < bs.length; i++) { // bs[i] = {4 5 9 3 2 ..} // ans[i] = 0个 cur = root; for (int j = 1; j < bs[i].length; j++) { int diff = bs[i][j] - bs[i][j - 1]; if (!cur.nexts.containsKey(diff)) { cur = null; break; } cur = cur.nexts.get(diff); } if (cur != null) { ans[i] = cur.pass; } } return ans; } }