这里介绍两种计数方法:一种是采用HashMap来计数,另一种计数是针对26个字母的计数方法。
- 方法一:使用hashMap,它的map.put(xx,map.getOrDefault(a[i],0)+1)==>实现计数;在通过它的key,获得它的value值
- 代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char a[]=s.toCharArray();//把字符串转换成字符数组
HashMap<Character, Integer>map=new HashMap<Character, Integer>();
for(int i=0;i<a.length;i++) {
map.put(a[i], map.getOrDefault(a[i],0)+1);//如果map.get(x)x不在就会报错,getOrDefault(c,0)如果没有就返回0,不会报错,如果存在就加1==就统计数了
}
List<Character>list=new ArrayList<Character>();
//遍历hashmap
int max=0;
for(char key:map.keySet()) {//keyset里面存放map的所有key
int x=map.get(key);//通过key取map的值
if(x>max) {
list.clear();//清空集合
list.add(key);
max=x;
}else if(x==max) {
list.add(key);
}
}
for(char c:list) {
System.out.print(c);
}
// System.out.println(map.toString());}
- 方法二:适用于26个字母的统计
- 首先:把获得的字符串遍历,得到字符
代码:for(int i=0;i<s1.length();i++){
char c=s1.chartAt(i);
}
2放入到数组中去:开辟一个长度为26的数组,思想就是,字符减去a得到一个数就是数组的下 标。Eg:a-”a”=0,因为ascall值
代码:sm[c-”a”]++;实现存入和计数。
- 代码:
-
列子:
-
代码:
static int[]ms=new int[26];
static int[] mt=new int[26];public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
String s1=scanner.next();
String s2=scanner.next();
for(int i=0;i<s1.length();i++){
char c=s1.charAt(i);
ms[c-'a']++;
}
for(int i=0;i<s2.length();i++){
char b=s2.charAt(i);
mt[b-'a']++;
}
for(int i=0;i<26;i++) {
if(ms[i]<mt[i]) {
System.out.println("NO");
return;
}
}
System.out.println("YES");
}