前缀树例题

街头密钥

链接
736be1b0624318b971c2e2b4dd12539d

问题

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]对应的值要记录
    }
  1. 错误
    path不止10条,除了'#'还有'-'要考虑
  2. 佬的写法
	public static void clear() {
		for (int i = 1; i <= cnt; i++) {
			Arrays.fill(tree[i], 0); // 清除tree和pass。为什么没end?题目里根本不需要end!
			pass[i] = 0;
		}
	}

```java
posted @ 2025-09-21 11:21  MineralWaterAndCola  阅读(7)  评论(0)    收藏  举报