前缀树例题
街头密钥
问题
1.不知道怎么建立特征数组
// 使用StringBuilder类和String.valueOf方法
StringBuilder builder = new StringBuilder();
for (int[] num : b) {
builder.setLength(0);
for (int i = 1; i < num.length; ++i) {
builder.append(String.valueOf(num[i] - num[i - 1]) + '#');
}
// [3,5,20]->[2#15#]
insert(builder.toString());
}
2.写法对比
int[] ans = new int[b.length]; // 我不知道如何创建ans
for(int[] num:a){ // 还写错了。用a建树用b查找
builder.setLength(0);
for(int i = 1;i < num.length;++i){
builder.append(String.valueOf(num[i] - num[i - 1] + '#'));
}
search(builder.toString());
}
佬的写法
int[] ans = new int[b.length];
for (int i = 0; i < b.length; i++) {// 用下标i的写法
builder.setLength(0);
int[] nums = b[i];// 到这里完成for(int[] num:a)的功能
for (int j = 1; j < nums.length; j++) {
builder.append(String.valueOf(nums[j] - nums[j - 1]) + "#");
}
ans[i] = search(builder.toString());// 每个b[i]对应的值要记录
}
- 错误
path不止10条,除了'#'还有'-'要考虑 - 佬的写法
public static void clear() {
for (int i = 1; i <= cnt; i++) {
Arrays.fill(tree[i], 0); // 清除tree和pass。为什么没end?题目里根本不需要end!
pass[i] = 0;
}
}
```java


浙公网安备 33010602011771号