LeetCode 2506 统计相似字符串对的数目

一、问题描述

我们面对的问题是处理一个下标从 0 开始的字符串数组 words。题目中定义了一种字符串相似的规则:如果两个字符串由相同的字符组成,那么就认为这两个字符串是相似的。例如,"abca" 和 "cba" 是相似的,因为它们都由字符 'a'、'b'、'c' 组成;而 "abacba" 和 "bcfd" 不相似,因为它们不是由相同字符组成的。我们的任务是找出满足字符串 words[i] 和 words[j] 相似的下标对 (i, j) 的数目,其中 0 <= i < j <= words.length - 1

二、解题思路

要解决这个问题,我们可以分两步走。第一步,需要一个函数来判断两个字符串是否相似;第二步,遍历字符串数组中的所有字符串对,统计相似字符串对的数量。

判断字符串是否相似

为了判断两个字符串是否由相同的字符组成,我们可以使用一个长度为 26 的数组来记录每个字符是否在字符串中出现过。因为英文字母一共有 26 个,我们可以将每个字符映射到数组的一个位置上。对于每个字符串,遍历其每个字符,将对应位置的数组元素置为 1。最后比较两个数组,如果所有对应位置的元素都相同,那么这两个字符串就是相似的。

统计相似字符串对的数量

使用两层嵌套循环遍历字符串数组,外层循环控制 i,内层循环控制 j,并且保证 j > i。对于每一对字符串,调用判断相似性的函数,如果它们相似,就将计数器加 1。

三、代码实现

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

// 检查两个字符串是否由相同字符组成(相似)
bool isSimilar(const char* str1, const char* str2) {
    int charSet1[26] = {0};
    int charSet2[26] = {0};

    // 遍历第一个字符串,标记出现过的字符
    for (int i = 0; str1[i] != '\0'; i++) {
        charSet1[str1[i] - 'a'] = 1;
    }

    // 遍历第二个字符串,标记出现过的字符
    for (int i = 0; str2[i] != '\0'; i++) {
        charSet2[str2[i] - 'a'] = 1;
    }

    // 比较两个字符集合是否相同
    for (int i = 0; i < 26; i++) {
        if (charSet1[i] != charSet2[i]) {
            return false;
        }
    }
    return true;
}

int similarPairs(char** words, int wordsSize) {
    int pairCount = 0;

    // 双重循环遍历所有可能的字符串对 (i, j),其中 i < j
    for (int i = 0; i < wordsSize; i++) {
        for (int j = i + 1; j < wordsSize; j++) {
            if (isSimilar(words[i], words[j])) {
                pairCount++;
            }
        }
    }

    return pairCount;
}

int main() {
    char* words[] = {"abca", "cba", "abacba", "bcfd"};
    int wordsSize = sizeof(words) / sizeof(words[0]);

    int result = similarPairs(words, wordsSize);
    printf("满足条件的下标对数目为: %d\n", result);

    return 0;
}

四、代码解释

isSimilar 函数

  • 该函数接受两个字符串指针 str1 和 str2 作为参数,用于判断它们是否相似。
  • charSet1 和 charSet2 是长度为 26 的整数数组,初始值都为 0。
  • 第一个 for 循环遍历 str1,将 str1 中出现的字符对应的数组元素置为 1。
  • 第二个 for 循环遍历 str2,同样将 str2 中出现的字符对应的数组元素置为 1。
  • 最后一个 for 循环比较两个数组的对应元素,如果有不同的元素,则返回 false;如果所有元素都相同,则返回 true

similarPairs 函数

  • 该函数接受一个字符串数组 words 和数组的大小 wordsSize 作为参数,返回相似字符串对的数量。
  • pairCount 是一个计数器,用于记录相似字符串对的数量。
  • 外层 for 循环控制 i,内层 for 循环控制 j,并且 j 从 i + 1 开始,保证 j > i
  • 对于每一对字符串 words[i] 和 words[j],调用 isSimilar 函数进行判断,如果相似,则 pairCount 加 1。
  • 最后返回 pairCount

main 函数

  • 定义了一个字符串数组 words,并计算其大小 wordsSize
  • 调用 similarPairs 函数计算相似字符串对的数量,并将结果存储在 result 中。
  • 使用 printf 函数输出结果。

五、复杂度分析

时间复杂度

时间复杂度为O(n^{2}*m),其中 n 是字符串数组的长度,m 是字符串的平均长度。这是因为我们需要使用两层嵌套循环遍历所有的字符串对,对于每一对字符串,还需要遍历它们的每个字符来判断是否相似。

空间复杂度

空间复杂度为O(1),因为只使用了常数大小的额外空间。具体来说,isSimilar 函数中使用的两个长度为 26 的数组 charSet1 和 charSet2 的大小是固定的,不随输入规模的变化而变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/976006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Deepseek高级使用教程】Deepseek-R1的5种高级进阶玩法,5分钟教会你Deepseek+行业的形式进行工作重构的保姆级教程

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 最近&#xff0c;有各行各业的小伙伴问我&#xff0c;到底应该怎么将deepseek融入进他们自身的工作流呢&#xff1f;其实这个问题很简单。我就以…

【LeetCode刷题之路】leetcode155.最小栈

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…

2025年信息科学与工程学院科协机器学习介绍——机器学习基本模型介绍

机器学习 目录 机器学习一.安装基本环境conda/miniconda环境 二.数据操作数据预处理一维数组二维数组以及多维数组的认识访问元素的方法torch中tenson的应用张量的运算张量的广播 三.线性代数相关知识四.线性回归SoftMax回归问题&#xff08;分类问题&#xff09;什么是分类问题…

pyecharts介绍

文章目录 介绍安装pyecharts基本使用全局配置选项 折线图相关配置地图模块使用柱状图使用 介绍 echarts虑是个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可&#xff0c;而Pyhon是门富有表达力的语言&a…

蓝桥杯——lcd显示

一&#xff1a;复制文件 从官方参考文件中复制相关文件&#xff0c;Src中的lcd.c&#xff0c;Inc中的lcd.h&#xff0c;fonts.h复制到自己创建的文件中 二&#xff1a;lcd初始化 在lcd.h中找到四个初始化函数&#xff0c;将其写到main文件中 三&#xff1a;写lcd显示函数 在…

ligerUI在前端层面对于数据的验证拦截

当你的系统框架采用ligerUI的时候&#xff0c;对于常见的数据验证&#xff0c;我们可以采取ligerUI本身的一些API调用来进行前端的数据验证&#xff0c;例如当你想遍历验证每行数据的时候&#xff1a; var rows liger.get("edit_Mtl").getData(); for (var i 0; i…

ubuntu-24.04.1-desktop 中的 QT6.7 QtCreator 调试程序

ubuntu-24.04.1-desktop 中的 QT6.7 QtCreator 中调试程序 &#xff11; 启动调试时提示&#xff1a;The kit does not have a debugger set.&#xff12; CDB配置问题&#xff12;.1 选择 工具 -> 外部 -> 配置&#xff12;.2 配置 CDB 路径 &#xff11; 启动调试时提示…

VSCode ssh远程连接内网服务器(不能上网的内网环境的Linux服务器)的终极解决方案

VSCode ssh远程连接内网服务器&#xff08;不能上网的内网环境的Linux服务器&#xff09; 离线下载vscode-server并安装: 如果远程端不能联网可以下载包离线安装,下载 vscode-server 的 url 需要和 vscode 客户端版本的 commit-id 对应.通过 vscode 面板的帮助->关于可以获…

【C语言基础】基本数据类型和常量介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 博客内容主要围绕&#xff1a; 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 基本数据类型和常量介绍一、整数类型 int二、浮点数值类型 f…

【Deepseek】AnythingLLM + Ollama

1. 下载安装 anythingllm 下载地址&#xff1a;https://anythingllm.com/desktop 2. 启动anything 点击 Get started 3.创建工作空间 4.选择Ollama大语言模型 聊天设置 当前只有一个1.5b的模型 下载完成7b模型后 选择后记得点击更新到工作空间&#xff01;&…

vscode settings(一):全局| 用户设置常用的设置项

参考资料 Visual Studio Code权威指南 by 韩骏 一. 全局设置与用户设置 1.1 Vscode支持两种不同范围的设置 用户设置(User Settings)&#xff1a;这是一个全局范围的设置&#xff0c;会应用到所有的Visual Studio Code实例中。工作区设置(Workspace Settings)&#xff1a;设…

Deepseek和Grok 3对比:写一段冒泡排序

1、这是访问Grok 3得到的结果 2、grok3输出的完整代码&#xff1a; def bubble_sort(arr):n len(arr) # 获取数组长度# 外层循环控制排序轮数for i in range(n):# 内层循环比较相邻元素&#xff0c;j的范围逐渐减少for j in range(0, n - i - 1):# 如果当前元素大于下一个元…

【DeepSeek系列】05 DeepSeek核心算法改进点总结

文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法&#xff1a;小模型也可以很强大 一、DeepSeek概要 2024年&#xff5e;2025年初&#xff0c;DeepSeek …

redis中的Lua脚本,redis的事务机制

lua脚本的特点 lua脚本可以操作redis数据库&#xff0c;并且脚本中的代码满足原子性&#xff0c;要么全部被执行&#xff0c;要么全部不执行 lua脚本的语法 脚本示例 lua脚本的草稿&#xff1a; 最终的lua脚本 lua脚本在java里调用的方法 RedisTemplete类里有一个方法&…

文章精读篇——用于遥感小样本语义分割的可学习Prompt

题目&#xff1a;Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 会议&#xff1a;CVPR 2024 Workshop 论文&#xff1a;10.48550/arXiv.2404.10307 相关竞赛&#xff1a;https://codalab.lisn.upsaclay.fr/competitions/17568 年份&#…

Golang访问Google Sheet

步骤 1、创建Project https://console.cloud.google.com/welcome?hlzh-cn&projectvelvety-being-444310-c1 2、启用Google Sheet API https://console.cloud.google.com/apis/library?hlzh-cn&projectvelvety-being-444310-c1 3、创建服务账号 https://conso…

HTTP SSE 实现

参考&#xff1a; SSE协议 SSE技术详解&#xff1a;使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为&#xff1a;服务端和客户端建立连接之后双方均保持连接&#xff0c;但仅支持服务端向客户端推送数据。推送完毕之后关闭连接&#xff0c;无状态行。 下面是基于…

网络安全与措施

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 # 网络安全问题概述 1) 数据安全 访问&#xff08;授权访问&#xff09;&#xff1b;存储&#xff08;容灾、备份或异地备份等&#xff09; 2) 应用程序 不能…

Next.js 学习-1

Next.js学习 引用&#xff1a;https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧&#xff0c;正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js&#xff0c;请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了&#xff0c;记得…