Leetcode 2157 字符串分组
广度搜索+哈希表+状态转换
贴代码:
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue; class Solution {
Map<Integer, Integer> map = new HashMap<>();
HashSet<Integer> set = new HashSet<>(); public int[] groupStrings(String[] words) {
int n = words.length; // 转换
for (int i = 0; i < n; i++) {
String s = words[i];
int mark = 0;
for (int j = 0, len = s.length(); j < len; j++) {
int v = s.charAt(j) - 'a';
mark += (1 << v);
}
Integer v = map.get(mark);
if (v == null) {
map.put(mark, 1);
} else {
map.put(mark, v + 1);
}
} // bfs;
int max = 0;
int total = 0; for (Entry<Integer, Integer> entry : map.entrySet()) {
int u = entry.getKey(); if (set.contains(u)) {
continue;
}
total++;
// 0 变 1
// 1 变 0
// 替换. count0,count1,
int num = bfs(u);
if (num > max) {
max = num;
}
}
return new int[] { total, max };
} public int bfs(int root) {
int cnt = map.get(root);
Queue<Integer> queue = new LinkedList<>();
queue.add(root);
set.add(root); while (!queue.isEmpty()) {
int u = queue.poll(); // add;
for (int i = 0; i < 26; i++) {
if ((u & (1 << i)) == 0) {
int v = u + (1 << i); Integer num = map.get(v); if (num == null) {
continue;
} if (set.contains(v)) {
continue;
} queue.add(v);
set.add(v);
cnt += num;
}
}
// delete;
for (int i = 0; i < 26; i++) {
if ((u & (1 << i)) > 0) {
int v = u - (1 << i); Integer num = map.get(v);
if (num == null) {
continue; } if (set.contains(v)) {
continue;
} queue.add(v);
set.add(v);
cnt += num; }
}
// transfer;
for (int i = 0; i < 26; i++) {
if ((u & (1 << i)) > 0) {
for (int j = 0; j < 26; j++) {
if( (u & (1<<j)) == 0){
int v = u - (1<<i) + (1<<j); Integer num = map.get(v);
if(num == null){
continue;
} if( set.contains(v)){
continue;
} queue.add(v);
set.add(v);
cnt += num;
}
}
}
}
} return cnt;
} }
Leetcode 2157 字符串分组的更多相关文章
- Leetcode中字符串总结
本文是个人对LeetCode中字符串类型题目的总结,纯属个人感悟,若有不妥的地方,欢迎指出. 一.有关数字 1.数转换 题Interger to roman和Roman to integer这两题是罗 ...
- LeetCode:字符串的排列【567】
LeetCode:字符串的排列[567] 题目描述 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: ...
- 前端与算法 leetcode 8. 字符串转换整数 (atoi)
目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...
- 前端与算法 leetcode 387. 字符串中的第一个唯一字符
目录 # 前端与算法 leetcode 387. 字符串中的第一个唯一字符 题目描述 概要 提示 解析 解法一:双循环 解法二:Set法单循环 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...
- LeetCode:字符串相加【415】
LeetCode:字符串相加[415] 题目描述 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100.num1 和num2 都只 ...
- LeetCode 49 Group Anagrams(字符串分组)
题目链接: https://leetcode.com/problems/anagrams/?tab=Description Problem:给一个字符串数组,将其中的每个字符串进行分组,要求每个分 ...
- [leetcode]49. Group Anagrams重排列字符串分组
是之前的重排列字符串的延伸,判断是重排列后存到HashMap中进行分组 这种HashMap进行分组的方式很常用 public List<List<String>> groupA ...
- ORACLE字符串分组聚合函数(字符串连接聚合函数)
ORACLE字符串连接分组串聚函数 wmsys.wm_concat SQL代码: select grp, wmsys.wm_concat(str) grp, 'a1' str from dual un ...
- LeetCode之“字符串”:最短回文子串
题目链接 题目要求: Given a string S, you are allowed to convert it to a palindrome by adding characters in f ...
- LeetCode之“字符串”:最长回文子串
题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 & ...
随机推荐
- P10033 题解
不喜欢特判?不喜欢分讨?不喜欢被卡 corner?不喜欢证明?不喜欢动脑子? 那就看这篇题解! 感性思路 首先感性地感受一下题目宽泛的限制条件题解区各种花式的构造方法就不难想出,符合条件的序列实在很多 ...
- DNS转发器·
实验介绍:dns转发器的作用 当客户端向dns1询问域名对应IP时,如果dns1不是该区域的授权域名服务器,则无法解析域名 dns1会根据转发器转发给dns3,如果dns3能解析,则返回给dns1. ...
- Hive-安装和部署(Hive3.1.2)
(一)安装前提 (1) 安装JDK1.8及以上版本 (2) 已经安装MySQL,推荐5.7. (3) 已经安装Hadoop. JDK.MySQL.Hadoop的安装,本文不再介绍. (二)安装Hive ...
- 大数据生态组件WEB UI地址汇总
(1) Hadoop Web UI http://master-1:50070/dfshealth.html#tab-overview (2) YARN应用Web UI http://master-1 ...
- Java并发编程-CompletableFuture(下)
大家好,我是小高先生,书接上文,我们继续来学习CompletableFuture.上文我们讲了基础装Future是如何升级为神装CompletableFuture以及如何购买CompletableFu ...
- CORS就是跨域吗?
首先,跨域的域是什么? 跨域的英文是:Cross-Origin. Origin 中文含义为:起源,源头,出生地. 在跨域中,"域"指的是一个 Web 资源(比如网页.脚本.图片等) ...
- centos7安装mailx
1.安装mailx yum install mailx -y 2.配置证书 mkdir -p /root/.certs echo -n | openssl s_client -connect smtp ...
- vivo 短视频体验与成本优化实践
作者:来自 vivo 互联网短视频研发团队 本文根据蔡创业.马运杰老师在"2023 vivo开发者大会"现场演讲内容整理而成. 在线点播场景,播放体验提升与成本优化是同等重要的两件 ...
- 【LeetCode动态规划#17】知道秘密的人,维护多个dp数组
知道秘密的人数 在第 1 天,有一个人发现了一个秘密. 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密.同时给你一个整数 forget ,表 ...
- 关于“非法的前向引用(illegal forward reference)”的探究
1.问题: 有如下代码: public class Test { static { i = 0;// 给变量赋值可以正常编译通过 System.out.print(i);// 编译器会提示" ...