本题是对一个「嵌套在数组里的 TLV 流」做顺序解析(线性扫描),并统计其中出现过的不同 tag 种类数。核心是一个贪心式的一次性顺序解析:
i = 0 开始,每次尝试读取一个 TLV:
tag 与 length 两个元素;若剩余不足两个,说明数组尾部残缺 → 格式错误,返回 0。length 必须严格大于 0;否则不符合规范 → 返回 0。2 + length(tag + length + value),并需补齐到 4 的倍数。若补齐后超出数组长度,说明数据不完整 → 返回 0。[0, 99] 的合法取值范围内;越界即格式错误 → 返回 0。给定一个数组,元素为数字,数组的内容表示多个连续的TLV(tag-length-value);
关于TLV,单个TLV具备以下特征:
1个数组元素,代表类型;1个数组元素,代表长度,且长度值大于0;4的倍数,不足的部分可用任意数字补齐;0-99;例如:单个TLV数组:2130,第一个数字2是tag,第二个数字1是length,第三个数字3是value,第四个数字0是补齐;
现在要求把给定的数组进行分析,解析出整个数组中存在多少种不同类型的tag,如果解析过程出现数组元素不符合规范,则返回0。
1、数组元素不超过10000
2、TLV的总数不超过1000
解析出的不同tag类型的数量,若格式错误则输出0
输入
[2,1,3,0,3,1,3,0,0]
输出
0
说明
格式不对
输入
[2,1,3,0,3,1,3,0]
输出
2
说明
格式正确,2个Tag类型,分别是2、3
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册