【Leetcode 每日一题】2506. 统计相似字符串对的数目

news/2025/2/23 23:14:20

问题背景

给你一个下标从 0 0 0 开始的字符串数组 w o r d s words words
如果两个字符串由相同的字符组成,则认为这两个字符串 相似

  • 例如,“abca” 和 “cba” 相似,因为它们都由字符 ‘a’、‘b’、‘c’ 组成。
  • 然而,“abacba” 和 “bcfd” 不相似,因为它们不是相同字符组成的。

请你找出满足字符串 w o r d s [ i ] words[i] words[i] w o r d s [ j ] words[j] words[j] 相似的下标对 ( i , j ) (i, j) (i,j),并返回下标对的数目,其中 0 ≤ i < j ≤ w o r d s . l e n g t h − 1 0 \le i \lt j \le words.length - 1 0i<jwords.length1

数据约束

  • 1 ≤ w o r d s . l e n g t h ≤ 100 1 \le words.length \le 100 1words.length100
  • 1 ≤ w o r d s [ i ] . l e n g t h ≤ 100 1 \le words[i].length \le 100 1words[i].length100
  • w o r d s [ i ] words[i] words[i] 仅由小写英文字母组成

解题过程

想到了字符串映射和字符串哈希,没想到用位运算来进行压缩存储。统计数量的做法,参考 好数对数目 就可以了。

具体实现

class Solution {
    public int similarPairs(String[] words) {
        Map<Integer, Integer> count = new HashMap<>();
        int res = 0;
        for (String word : words) {
            int mask = 0;
            for (char c : word.toCharArray()) {
                mask |= 1 << (c - 'a');
            }
            int cur = count.getOrDefault(mask, 0);
            res += cur;
            count.put(mask, cur + 1);
        }
        return res;
    }
}

http://www.niftyadmin.cn/n/5863854.html

相关文章

八大排序算法(1)插入排序-直接插入排序 和 希尔排序

直接插入排序&#xff08;Insertion Sort&#xff09; 直接插入排序是最基本的插入排序算法&#xff0c;工作原理如下&#xff1a; 从第二个元素开始&#xff0c;将其与前面已经排好序的部分进行比较。 找到合适的位置后&#xff0c;将该元素插入到合适的位置&#xff0c;同…

【20250221更新】WebStorm2024.3.3版本安装+使用方法

1、官网下载正版WebStorm&#xff0c;链接如下 Thank you for downloading WebStorm! 2、获取使用教程&#xff0c;给博主留言【压缩包有密码&#xff0c;见下面】 通过百度网盘分享的文件&#xff1a;【2025022… 链接:https://pan.baidu.com/s/1UMMEDKbRwlGcffAhOlwR5g?pw…

华为guass在dbever和springboot配置操作

下面记录华为guass在dbever和springboot配置操作&#xff0c;以备忘。 1、安装dbeaver-ce-23.2.0-x86_64-setup.exe和驱动程序 Download | DBeaver Community 2、配置高斯数据库驱动 3、新建数据库连接 4、操作指引 opengauss官方文档 https://docs-opengauss.osinfra.cn/zh…

商业航天级微控制器单元(MCU)技术特征分析

在商业航天及特种工业控制领域&#xff0c;微控制器单元&#xff08;MCU&#xff09;的抗辐射性能与系统可靠性直接关系到设备在极端环境下的运行效能。国科安芯AS32S601系列MCU基于自主RISC-V架构&#xff0c;其180MHz(AS32S601)的工作频率与抗辐射加固设计&#xff0c;为航天…

C++跨平台开发:策略与实践在软件开发领域

在软件开发领域&#xff0c;跨平台能力意味着一个应用程序可以在不同的操作系统上运行&#xff0c;无需针对每个平台单独编写代码。C作为一种强大的编程语言&#xff0c;因其高效性和灵活性&#xff0c;在跨平台开发领域有着广泛的应用。本文将探讨C跨平台开发的关键策略与实践…

【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致

业务场景 发布信息&#xff0c;更新到数据库MySQLCOS操作&#xff0c;更新JSON文件 不过可能存在幂等性和数据一致性的问题。 // 批量存MySQL entityPublishService.saveOrUpdateBatch(entityPublishList); // 遍历批量存COS对象存储searchEntitys.forEach(req -> {//删除…

国产编辑器EverEdit - 在编辑器中对文本进行排序

1 排序 1.1 应用场景 某些场景下用户需要对文本进行排序&#xff0c;比如&#xff1a;用户正在编辑函数列表&#xff0c;对函数列表按名称按字母A-Z排序。 1.2 使用方法 1.2.1 对选中文本进行排序 在编辑器中选中要排序的文本。选择主菜单工具 -> 排序 -> 升序排序 如…

Java数据结构_一篇文章搞定java对象的比较_7

1. PriorityQueue中插入对象 上篇文章研究了优先级队列&#xff0c;优先级队列在插入元素中&#xff0c;要求插入的元素不能是null或者元素之间必须要能够进行比较&#xff0c;为了简单起见&#xff0c;上篇文章只是插入了Integer类型&#xff0c;那优先级队列中是否能插入自定…