使用Map键值对解题,先将摊主的珠串存入机会,并更新个数。
然后再遍历小红的珠串,若跟摊主的一样,则相同的珠串个数减一;摊主中无小红要的珠串,则将其存入,并记为-1。
遍历当前机集合的值,若值为-1,则说明少珠子,并记录缺少的个数。不少珠子,则输出多的个数
import java.util.*;
  
public class Main {
    public static void main(String[] args)  {
         
        Scanner sc = new Scanner(System.in);
        String sell = sc.next();//摊主的珠串
        String buy = sc.next();//小红想做的珠串
         
        LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
         
        //将摊主的珠串存入集合
        for(int i =0; i<sell.length(); i++){
            if(map.containsKey(sell.charAt(i))){
                int num = map.get(sell.charAt(i));
                num++;
                map.put(sell.charAt(i), num);
            }else{
                map.put(sell.charAt(i), 1);
            }
        }
         
        //遍历小红的珠串,修改集合信息
        for(int i=0; i<buy.length(); i++){
            if(map.containsKey(buy.charAt(i))){
                int count = map.get(buy.charAt(i));
                count--;
                map.put(buy.charAt(i), count);
            }else{
                map.put(buy.charAt(i), -1);
            }
        }
         
        //遍历当前集合,判断是否存在珠串缺少的情况
        Iterator<Integer> iterator = map.values().iterator();
        int num = 0;//多或者少的情况
        boolean flag =true;
        while(iterator.hasNext()){
            int next = iterator.next();
            if(next<0){//即上面提到的键值对为-1的话,是少珠子的
                flag = false;
                num+=next;
            }
        }
         
        //输出结果
        //不存在缺少珠串的情况
        if(flag) {
            System.out.println("Yes " + (sell.length()- buy.length()));
        }else{
        //缺少珠串
            System.out.println("No "+(-num));
        }
 
         
            
    }
  
}