uva 12504 Updating a Dictionary(更新字典)

题意  比较两个字典  按字典序输出所有添加 删除 修改的项   如果没有任何更新  输出  No changes

map的应用  对比两个字典  注意开始字符串的处理和字典可以为空


import java.math.BigInteger;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		while(n--!=0){
			Map<String,BigInteger> one = new HashMap<>();
			Vector<String> ins = new Vector<>();//增加的键
			Vector<String> des = new Vector<>();//减少的键
			Vector<String> upd = new Vector<>();//修改的键
			Vector<String> bal = new Vector<>();//不变的键
			String str1 = scan.next();
			String str2 = scan.next();
			String ss1 = str1.substring(1, str1.length()-1);
			String ss2 = str2.substring(1, str2.length()-1);
			String[] s1 = ss1.split(",");
			String[] s2 = ss2.split(",");
			for(int i=0;i<s1.length;i++){
				if(!(s1[i].equals("")||s1[i].equals(" "))){
					int index = s1[i].indexOf(':');
					String name = s1[i].substring(0, index);
					BigInteger num = new BigInteger(s1[i].substring(index+1));
					one.put(name, num);
				}
			}
			for(int i=0;i<s2.length;i++){
				if(!(s2[i].equals("")||s2.equals(" "))){
					int index = s2[i].indexOf(':');
					String name = s2[i].substring(0, index);
					BigInteger num = new BigInteger(s2[i].substring(index+1));
					if(!one.containsKey(name)){
						ins.add(name);
						continue;
					}else{
						BigInteger b = one.get(name);
						if(b.compareTo(num)!=0){
							one.put(name, new BigInteger("-1"));
						}else{
							one.put(name, new BigInteger("-2"));
						}
					}
				}
			}
			Iterator<Map.Entry<String, BigInteger>> entries = one.entrySet().iterator();
			BigInteger a1 = new BigInteger("-1");
			BigInteger a2 = new BigInteger("-2");
			while(entries.hasNext()){
				Map.Entry<String, BigInteger> entry = entries.next();
				if(entry.getValue().compareTo(a2)==0){
					bal.add(entry.getKey());
				}else if(entry.getValue().compareTo(a1)==0){
					upd.add(entry.getKey());
				}else{
					des.add(entry.getKey());
				}
			}
			Collections.sort(ins);
			Collections.sort(des);
			Collections.sort(upd);
			Collections.sort(bal);
			if(upd.isEmpty()&&ins.isEmpty()&&des.isEmpty()){
				System.out.println("No changes");
			}else{
				if(!ins.isEmpty()){
					System.out.print("+");
					for(int i=0;i<ins.size();i++){
						if(i!=ins.size()-1){
							System.out.print(ins.get(i)+",");
						}else{
							System.out.print(ins.get(i));
						}
					}
					//if(n!=0)
					System.out.println();
				}
				if(!des.isEmpty()){
					System.out.print("-");
					for(int i=0;i<des.size();i++){
						if(i!=des.size()-1){
							System.out.print(des.get(i)+",");
						}else{
							System.out.print(des.get(i));
						}
					}
					//if(n!=0)
					System.out.println();
				}
				if(!upd.isEmpty()){
					System.out.print("*");
					for(int i=0;i<upd.size();i++){
						if(i!=upd.size()-1){
							System.out.print(upd.get(i)+",");
						}else{
							System.out.print(upd.get(i));
						}
					}
					//if(n!=0)
					System.out.println();
				}
			}
			//if(n!=0)
			System.out.println();
		}
	}
	
	public static int f(String str1,String str2){
		if(str1.equals(str2)){
			return 0;
		}else{
			int index1 = str1.indexOf(":");
			int index2 = str2.indexOf(":");
			BigInteger b1 = new BigInteger(str1.substring(index1+1));
			BigInteger b2 = new BigInteger(str2.substring(index2+1));
			return b2.compareTo(b1);
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值