题目:小伙伴们发现, 火星人都有神奇的波粒二象性:
单单凭眼睛, 不能准确地判定他们的位置, 还需要用手触摸一下,才能固定他们的位置
单单用手触摸,也不能锁定他们的位置, 还必须 先 看到
火星人的波粒二象性很奇怪, 每一次触摸至少要对应一次预先的看到, 即看到一次, 触摸两次, 第二次的就会失效, 但是先看到 3 次, 再触摸 3 次, 则是有效的
同一个人,在同一个地点的观察和触摸才可以匹配
所以 同学们收集了过去一天内所有的观察和触摸到火星人的记录, 希望发现前一天中 无效的触摸 有多少次.
记录格式为: 用逗号格开的 4 元组. 4 部分的信息分别为: 观察者ID, 观察地点, 当时的动作, 动作发生的时间戳(精确到秒)
例如
1710170708481678574,1895915,click,1508195328
1607272005511968269,1191643,see,1507998070
要求输出的结果为: 一个整数
思路:将观察者Id和观察地点作为key,以当时的动作为value,在key相同情况下依次判断当时的动作的情况。
代码
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
Map<String, String> idMap = new HashMap<>();
Long result = 0L;
while(sc.hasNext()){
String r = sc.next();
String[] rs = r.split(",");
String key = rs[0] + "_" + rs[1];
String action = rs[2];
Long ts = Long.parseLong(rs[3]);
String value = idMap.get(key);
if(value == null || value.equals("")){
if(action.equals("see")){
idMap.put(key, "see");
}else if(action.equals("click")){
result ++;
}
}else if(value.equals("see")){
if(action.equals("click")){
idMap.put(key, "click");
}
}else if(value.equals("click")){
if(action.equals("click")){
result ++;
}else if(action.equals("see")){
idMap.put(key, "see");
}
}
}
System.out.println(result);
}
}