题目描述 有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值 例如: 字符串"abacaba",里面包括4个’a’,2个’b’,1个’c’,于是这个字符串的价值为4 * 4 + 2 * 2 + 1 * 1 = 21 牛牛有一个字符串s,并且允许你从s中移除最多k个字符,你的目标是让得到的字符串的价值最小。 输入描述: 输入包括两行,第一行一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),其中只包含小写字母(‘a’-‘z’)。 第二行包含一个整数k(0 ≤ k ≤ length),即允许移除的字符个数。 输出描述: 输出一个整数,表示得到的最小价值 示例1 输入 aba 1 输出 2 上代码:
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int[] a = new int[s.length()]; int sum = 0; int index = 0; int k = sc.nextInt(); HashMap<Character,Integer> map = new HashMap<>(); for(int i = 0;i<s.length();i++){ char c = s.charAt(i); if(map.containsKey(c)){ int v = map.get(c)+1; map.put(c,v); a[index] = 2*v - 1; sum+=a[index]; index++; }else{ map.put(c,1); a[index++] = 1; sum+=1; } } Arrays.sort(a); index = s.length() - 1; while(k>0){ k--; sum -= a[index--]; } System.out.println(sum); } }说明如下: 1. 字符串的价值通俗说就是统计相同的字符串的个数,计算相同个数的幂次方,并将不同的幂次方求和; 2. 用hashmap计算每个字符串的个数; 3. 计算每个字符的幂次方; 4. 求和(每种字符)。 5. 完毕 !!! HashMap的用法: HashMap简介
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量 只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。 通常,默认加载因子是 0.75, 这是在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 get 和 put 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生 rehash 操作。 HashMap共有4个构造函数,如下:
// 默认构造函数。 HashMap() // 指定“容量大小”的构造函数 HashMap(int capacity) // 指定“容量大小”和“加载因子”的构造函数 HashMap(int capacity, float loadFactor) // 包含“子Map”的构造函数 HashMap(Map<? extends K, ? extends V> map)HashMap的API
void clear() Object clone() boolean containsKey(Object key) boolean containsValue(Object value) Set<Entry<K, V>> entrySet() V get(Object key) boolean isEmpty() Set<K> keySet() V put(K key, V value) void putAll(Map<? extends K, ? extends V> map) V remove(Object key) int size() Collection<V> values()参考文档: https://www.cnblogs.com/skywang12345/p/3310835.html
