#OD442. 模拟数据序列化传输
模拟数据序列化传输
题目解析和算法源码
华为OD机试 - 模拟数据序列化传输(Java & JS & Python & C & C++)-CSDN博客
OJ用例
题目描述
模拟一套简化的序列化传输方式,请实现下面的数据编码与解码过程
- 编码前数据格式为 [位置,类型,值],多个数据的时候用逗号分隔,位置仅支持数字,不考虑重复等场景;类型仅支持:Integer / String / Compose(Compose的数据类型表示该存储的数据也需要编码)
- 编码后数据参考图示,数据区的格式是:位置#类型#长度#数据,类型存储需要编码,Integer->0;String->1;Compose->2,长度是指数据的字符长度;数据仅允许数字、大小写字母、空格。
- 输入的编码字符长度不能超过1000,一个数据的格式错误,则解析剩下数据,其他错误输出ENCODE_ERROR。
- 输入的解码字符不能超过1000,数据区异常则跳过继续解析剩余数据区,其他异常输出DECODE_ERROR。
输入描述
输入有两行:
- 第一行是命令,1表示编码,2表示解码
- 第二行输入待编码、解码的字符
数据最多嵌套10层,[1,Compose,[1,String,Second]] 为2层嵌套。
输出描述
如果输入要求是编码,则输出编码结果;
如果输入要求是解码,则输出解码结果;
当异常时输出对应的错误字符。
用例1
输入
1
[1,String,I am Mary],[2,Integer,23],[3,Long,1000000],[4,Compose,[1,String,I am Kitty],[2,Integer,44]]
输出
1#1#9#I am Mary2#0#2#234#2#25#1#1#10#I am Kitty2#0#2#44
说明
由于Long型为不支持类型,所以数据[3,Long,1000000]自动被过滤掉
用例2
输入
2
1#1#9#I am Mary2#0#2#233#0#3#8794#2#25#1#1#10#I am Kitty2#0#2#44
输出
[1,String,I am Mary],[2,Integer,23],[3,Integer,879],[4,Compose,[1,String,I am Kitty],[2,Integer,44]]
用例3
输入
2
xxx
输出
DECODE_ERROR
说明
输入的待解码数据不满足格式要求
用例4
输入
1
[1,String,I am Mary],[2,Integer,23]],
输出
ENCODE_ERROR
说明
输入格式不满足输入格式要求