问题背景
给你一个下标从 0 0 0 开始的字符串 s s s,重复执行下述操作 任意 次:
- 在字符串中选出一个下标 i i i,并使 c c c 为字符串下标 i i i 处的字符。并在 i i i 左侧(如果有)和 右侧(如果有)各 删除 一个距离 i i i 最近 的字符 c c c。
请你通过执行上述操作任意次,使 s s s 的长度 最小化 。
返回一个表示 最小化 字符串的长度的整数。
数据约束
- 1 ≤ s . l e n g t h ≤ 100 1 \le s.length \le 100 1≤s.length≤100
- s s s 仅由小写英文字母组成
解题过程
阅读理解题,要注意的是描述说的是左侧和右侧,没有要求相邻,实际上就是要求去重。
用哈希表没什么难度,用位运算练习一下模拟集合操作。
具体实现
class Solution {public int minimizedStringLength(String s) {int mask = 0;for (char c : s.toCharArray()) {mask |= 1 << (c - 'a');}return Integer.bitCount(mask);}
}