题目描述:有一个字符串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;
}
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
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+"个字符串");
}
}
看看,可以当换个思路
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!