code: public List<Integer> commonPrefixSearch(String key, int pos, int len, int nodePos)
      {
          if (len <= 0)
              len = key.length();
          if (nodePos <= 0)
              nodePos = 0;
  
          List<Integer> result = new ArrayList<Integer>();
  
          char[] keyChars = key.toCharArray();
  
          int b = base[nodePos];
          int n;
          int p;
  
          for (int i = pos; i < len; i++)
          {
              p = b + (int) (keyChars[i]) + 1;    // 状态转移 p = base[char[i-1]] + char[i] + 1
              if (b == check[p])                  // base[char[i-1]] == check[base[char[i-1]] + char[i] + 1]
                  b = base[p];
              else
                  return result;
              p = b;
              n = base[p];
              if (b == check[p] && n < 0)         // base[p] == check[p] && base[p] < 0 查到一个词
              {
                  result.add(-n - 1);
              }
          }
  
          return result;
      }
docs: 前缀查询
  
  @param key     查询字串
  @param pos     字串的开始位置
  @param len     字串长度
  @param nodePos base中的开始位置
  @return 一个含有所有下标的list