题目描述:有一个字符串s,有一个目标字符串t,尝试用s中的字符组成t,不可以重复使用,问最多可以组成多少字符串t,如果拼凑不出返回0。
比如输入{dogabcd,dog},输出1
Java笔试题,希望给个思路
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- CSDN专家-天际的海浪 2022-03-29 02:32关注
思路是分别用两个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; } }
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用