本期我们写一个关于面试常问到的一个题“给你一个字符串,每个字符出现的次数是多少”
其实这种逻辑题首先我们需要理清思路,这个思路怎么理,那就看关键字,
这里的关键字有两个,一、字符串,二、次数,这两个代表着什么呢,字符串不能重复
所以我们需要用到一个筛选,常用的筛选容器有哪些?
Map、Set
Map的Key不可重复,Set无序不可重复
这里多说一句,Set的底层就是利用Map的Key来实现的。
本期我们用的是Set来做赛选,话不多说直接上代码
package com.linj.string; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SxtString { public static void main(String[] args) { // 我们用的是字母做随机字符 char[] c = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int max=24,min=1; StringBuilder str = new StringBuilder(); // 通过存取字符的容器 for (int i = 0; i < 100; i++) { str.append(c[(int) (Math.random()*(max-min)+min)]); } String name = str.toString(); System.out.println("随机出来的字符串是:"+name); String[] ss = new String[100]; for (int i = 0; i < name.length(); i++) { ss[i] = name.substring(i, i+1); // 将字符添加到容器中 } Set<String> setStr = new HashSet<String>(); for (int i = 0; i < ss.length; i++) { setStr.add(ss[i]); // 这里就是筛选,筛选出那些不重复的字符 } System.out.println("数组的字符串:"+ss.toString()+"/n 长度是:"+ss.length); System.out.println("Set的字符串是:"+setStr.toString()); for (Iterator iterator = setStr.iterator(); iterator.hasNext();) { // 遍历一下Set中的字符 String string = (String) iterator.next(); int strlen = isStr(ss,string); // System.out.println(string+":出现的次数是 " +strlen); } } public static int isStr(String[] s, String str) { //公共查询方法 int count=0; for (int i = 0; i < s.length; i++) { if(str.equals(s[i])) { count++; } } return count; } }
默默地温故知新