题目描述
误码率 是最常用的数据通信传输质量指标。它可以理解为“在多少位数据中出现一位差错”。
移动通信网络中的误码率主要是指比特误码率,其计算公式如下:比特误码率=错误比特数/传输总比特数,为了简单,我们使用字符串来标识通信的信息,一个字符错误了,就认为出现了一个误码输入一个标准的字符串,和一个传输后的字符串,计算误码率
字符串会被压缩,
例:"2A3B4D5X1Z"表示"AABBBDDDDXXXXXZ"用例会保证两个输入字符串解压后长度一致,解压前的长度不一定一致
每个生成后的字符串长度<100000000。
输入描述
两行,分别为两种字符串的压缩形式。每行字符串(压缩后的)长度<100000
输出描述
一行,错误的字等数量/展开后的总长度
备注
注意:展开后的字符串不含数字
用例1
输入
3A3B
2A4B
输出
1/6
说明
无
用例2
输入
5Y5Z
5Y5Z
输出
0/10
说明
无
用例3
输入
4Y5Z
9Y
输出
5/9
说明
无
用例4
输入
4Y5Z
9Y
输出
5/9
说明
无
题目解析:
解题思路
1、将压缩的数据全部解析完比较不同的数量【由于解压之后数据量可能很大,会导致超时问题】
2、直接比较压缩的数据:
① 拆分压缩的数据放入队列中:
例如:
str1 : 4Y5Z -> queue: [‘4Y’,‘5Z’]
str2 : 9Y -> queue: [‘9Y’]
② 从队列中不断去取数据,比较【先比较数字大小一致,再比较字符是否一致】之后多余部分再写入队列中,将不同的部分写入队列中
str1 : queue: [‘5Z’]
str2 : queue: [‘5Y’]
java实现
package com.HW;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
/**
* @ClassName : T001
* @Author : kele
* @Date: 2023/10/22 9:09
* @Description :
*/
public class T001 {
public static int err = 0;
public static int all = 0;
public static void main(String[] args) {
String s1 = "4Y5Z";
String s2 = "9Y";
handle(s1,s2);
System.out.println(""+err+"/"+ all);
}
public static void handle(String str1, String str2) {
Queue<String> stack1 = new LinkedList<>();
Queue<String> stack2 = new LinkedList<>();
for (String s : str1.split("(?<=\\D)(?=\\d)")) {
stack1.add(s);
int i = Integer.parseInt(s.split("(?<=\\d)(?=\\D)")[0]);
all += i;
}
for (String s : str2.split("(?<=\\D)(?=\\d)")) {
stack2.add(s);
}
while (!stack1.isEmpty()) {
String pop1 = stack1.poll();
String[] split = pop1.split("(?<=\\d)(?=\\D)");
int num1 = Integer.parseInt(split[0]);
String char1 = split[1];
String pop2 = stack2.poll();
String[] split2 = pop2.split("(?<=\\d)(?=\\D)");
int num2 = Integer.parseInt(split2[0]);
String char2 = split2[1];
if (num1 == num2) {
if (!char1.equals(char2)) {
err += num1;
}
} else if (num1 > num2) {
int num = num1 - num2;
if (!char1.equals(char2)) {
err += num2;
}
stack1.add(num + char1);
} else {
int num = num2 - num1;
if (!char1.equals(char2)) {
err += num1;
}
stack2.add(num + char1);
}
}
}
}