Java笔试题,希望给个思路

题目描述:有一个字符串s,有一个目标字符串t,尝试用s中的字符组成t,不可以重复使用,问最多可以组成多少字符串t,如果拼凑不出返回0。
比如输入{dogabcd,dog},输出1

思路是分别用两个HashMap统计出字符串s和字符串t中每个字符的个数,
遍历字符串t的HashMap中字符
用字符串s的HashMap中相同字符的个数整除以字符串t的HashMap中每个字符的个数,返回整除结果中的最小值即可

参考代码如下:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

class Test01 {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入字符串s:");
    String s=sc.nextLine();
    System.out.println("请输入字符串t:");
    String t=sc.nextLine();
    System.out.println(res(s,t));
  }
  public static int res(String s,String t) {
    Map<Character,Integer> t_map =count(t);
    Map<Character,Integer> s_map =count(s);
    int n, min = 99999;
    for(Character c:t_map.keySet() ){//遍历t_map
      if(s_map.containsKey(c)){//查看字符是否在s中存在,如果存在
           n = s_map.get(c) / t_map.get(c);
           if (n<min)
              min = n;
      } else
          return 0;
    }  
    return min;
  }
  public static Map<Character,Integer> count(String str){
    Map<Character,Integer> map=new HashMap<Character,Integer>();
    char[] array_char=str.toCharArray();//把字符串转成字符数组
    for(char arr_char: array_char){//遍历字符数组
      if(map.containsKey(arr_char)){//查看字符是否在map的key中存在,如果存在
        Integer old=map.get(arr_char);//通过key获取value的值
        map.put(arr_char,old+1);//把字符放入map的key中,value设置为通过key获取value的值+1
      }else{//查看字符是否在map的key中存在,如果不存,把字符放入map的key中,value默认设置为1
        map.put(arr_char,1);
      }
    }
    return map;
  }
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img



import java.util.Scanner;
public class TestApp {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串s:");
        String s=sc.nextLine();
        System.out.println("请输入字符串t:");
        String t=sc.nextLine();
        int len=s.length();
        int result=0;
        boolean flag=true;
        while(true){
            for(int i=0;i<t.length();i++){
                s=s.replaceFirst(t.charAt(i)+"","");
                if (s.length()!=len){
                    len=s.length();
                }else {
                    flag=false;
                    break;
                }
            }
            if (!flag){
                break;
            }
            result++;
        }
        System.out.println("共计有"+result+"个字符串");
    }
}

看看,可以当换个思路

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632