本期我们写一个关于面试常问到的一个题“给你一个字符串,每个字符出现的次数是多少”

其实这种逻辑题首先我们需要理清思路,这个思路怎么理,那就看关键字,

这里的关键字有两个,一、字符串,二、次数,这两个代表着什么呢,字符串不能重复

所以我们需要用到一个筛选,常用的筛选容器有哪些?

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;
    }
}

 

posted @ 2020-06-01 22:14  沐颜小妖精  阅读(201)  评论(0编辑  收藏  举报