leetcode2744. 最大字符串配对数目

Problem: 2744. 最大字符串配对数目

文章目录

  • 题目
  • 解题方法1
  • 复杂度1
  • Code1
  • 解题方法2
  • 复杂度2
  • Code2

题目

给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。

如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以匹配:

字符串 words[i] 等于 words[j] 的反转字符串。
0 <= i < j < words.length
请你返回数组 words 中的 最大 匹配数目。

注意,每个字符串最多匹配一次。

示例 1:

输入:words = [“cd”,“ac”,“dc”,“ca”,“zz”]
输出:2
解释:在此示例中,我们可以通过以下方式匹配 2 对字符串:

  • 我们将第 0 个字符串与第 2 个字符串匹配,因为 word[0] 的反转字符串是 “dc” 并且等于 words[2]。
  • 我们将第 1 个字符串与第 3 个字符串匹配,因为 word[1] 的反转字符串是 “ca” 并且等于 words[3]。
    可以证明最多匹配数目是 2 。
    示例 2:

输入:words = [“ab”,“ba”,“cc”]
输出:1
解释:在此示例中,我们可以通过以下方式匹配 1 对字符串:

  • 我们将第 0 个字符串与第 1 个字符串匹配,因为 words[1] 的反转字符串 “ab” 与 words[0] 相等。
    可以证明最多匹配数目是 1 。
    示例 3:

输入:words = [“aa”,“ab”]
输出:0
解释:这个例子中,无法匹配任何字符串。

提示:

1 <= words.length <= 50
words[i].length == 2
words 包含的字符串互不相同。
words[i] 只包含小写英文字母。

解题方法1

遍历所有的nums,将遍历到的值排序,统一成一个key,声明一个字典,在字典中这个key 加一,最后遍历字典,如果某个key出现了k次,说明可以匹配k//2次,我们累加结果即可

复杂度1

时间复杂度:

遍历了一次所以是 O ( n ) O(n) O(n)

空间复杂度:

最多存储所有的数,所以是 O ( n ) O(n) O(n)

Code1

class Solution:def maximumNumberOfStringPairs(self, words: List[str]) -> int:d = defaultdict(int)ans = 0for i in words:x = str(sorted(list(i)))d[x] += 1for key,val in d.items():ans += val // 2return ans

解题方法2

我们可以优化上一种方法,不需要每次都生成key,只遍历一遍nums,将遍历到的字符串放入set集合中,在放入前判断这个字符串的反转字符串是否存在,如果存在,则结果加1

复杂度2

时间复杂度:

遍历了一次所以是 O ( n ) O(n) O(n)

空间复杂度:

最多存储所有的数,所以是 O ( n ) O(n) O(n)

Code2

class Solution:def maximumNumberOfStringPairs(self, words: List[str]) -> int:ans = 0s = set()for x in words:if x[::-1] in s:ans+=1s.add(x)return ans

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3使用

1、列表实现 <el-table :data"tableData" border style"width: 100%" selection-change"handleSelectionChange" :header-cell-style"{text-align:center}"><el-table-column type"selection" width"55"…

使用turf.polygon判断点是否在面内部

const poly turf.polygon(obj.features[0].geometry.coordinates) const point turf.point(newPoint)const isWithinBoundary turf.booleanPointInPolygon(point, poly) console.log(isWithinBoundary, 点是否在面内)ps&#xff1a;需要注意的是&#xff0c; 如果使用turf.p…

【注解】@RequiredArgsConstructor 按需自动生成构造函数,举例说明

RequiredArgsConstructor 是Lombok库中的一种注解&#xff0c;它用于自动生成构造函数&#xff0c;针对于final字段的构造函数。它的作用包括以下几点&#xff1a; 自动生成构造函数&#xff1a;RequiredArgsConstructor 注解自动生成一个构造函数&#xff0c;该构造函数接受标…

以太坊账户地址与比特B地址生成方法对比

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 以太坊和比特B地址在生成方…

Vue2:使用pubsub-js实现组件间通信

一、场景描述 我们学习了全局事件总线&#xff0c;通过自定义事件的方式来进行组件间通信。 现在&#xff0c;再学习一个第三方库pubsub-js&#xff0c;消息订阅与发布的方式来实现组件间通信。 二、使用pubsub-js 1、安装 npm i pubsub-js2、组件里引入 import pubsub fr…

17.JVM-[一篇通]

文章目录 JVM1.JVM 简介 (一个进程有一个JVM)1.1JVM 发展史1.2 JVM 和《Java虚拟机规范》 2.JVM 运行流程2.1JVM 执行流程 3.JVM 运行时数据区3.1 堆&#xff08;线程共享 一个进程只有一份堆&#xff09;3.2Java虚拟机栈&#xff08;线程私有 每个线程都有一份属于自己的栈&am…

Linux网络编程(二-套接字)

目录 一、背景知识 1.1 端口号 1.2 网络字节序 1.3 地址转换函数 二、Socket简介 三、套接字相关的函数 3.1 socket() 3.2 bind() 3.3 connect() 3.4 listen() 3.5 accept() 3.6 read()/recv()/recvfrom() 3.7 send()/sendto() 3.8 close() 四、UPD客服/服务端实…

规范文字引言与材料

撰写引言 什么是引言&#xff1f; 引言又叫前言、绪论、引子、绪言等。 引言写在书或文章的正文前面&#xff0c;是类似序言或导言的部分。 在科研论文中&#xff0c;引言是引导读者了解研究背景、目的、 意义和研究问题的关键部分。对于人工智能方向的论 文&#xff0c;引言…

x-cmd pkg | curl - 极其强大的网络请求处理工具

目录 简介用户首次快速实验指南轻量级网络请求工具安全竞品和相关作品进一步探索 简介 curl&#xff08;Client for URLs&#xff09;是一款网络请求工具。 curl 于 1996 年首次发布。它最初被命名为 httpget 后更名为curl。 curl 常用于发送网络请求&#xff0c;它支持多种网…

一条sql是如何运行的

在我们平时使用sql的时候&#xff0c;基本是基于黑盒的使用方式&#xff0c;在客户端输入一条sql语句&#xff0c;然后回显想要的数据&#xff0c;对于mysql server端内部如何运行的以及与存储引擎如何交互的不得而知。 通过下面一幅图&#xff0c;大致描述客户端和服务端交互…

HTML中有哪些属于表单元素?那些属于表格元素?请分别列举5个并说明用途?

在HTML中&#xff0c;有一些元素是专门用于表单的输入和布局&#xff0c;还有一些元素是专门用于表格的显示。以下是五个表单元素和五个表格元素&#xff0c;以及它们的用途&#xff1a; 表单元素&#xff1a; <input>&#xff1a;这是最常用的表单元素&#xff0c;用于…

免费分享Deepl和google谷歌翻译api接口

谷歌翻译API可以帮助用户在不同语言之间进行即时翻译&#xff0c;支持超过 200 种语言的互译功能。 接口亲测是可用&#xff0c;简单而且速度很快。专用跨境电商等业务。 接口地址&#xff1a;https://www.tanshuapi.com/market/detail-98 接口请求测试phthon示例&#xff1a…

什么是VUE 创建第一个VUE实例

一、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 构建用户界面 的 渐进式 框架 Vue2官网&#xff1a;Vue.js 1.什么是构建用户界面 基于数据渲染出用户可以看到的界面 2.什么是渐进式 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vu…

Android 基础技术——addView 流程

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 addView 在了解 addView 流程之前&#xff0c;先回答下以下几个问题&#xff1a; PhoneWindow是什么时候创建的&#xff1f; DectorView 是什么&#xff1f; DectorView 是什么时候创建的&#xf…

YAML在python中的基础使用

一、编写一个yaml配置文件 基础语法&#xff1a; 大小写敏感使用缩进表示层级不允许使用制表符\t,只允许使用空格缩进的空格数量不作要求,推荐使用2个空格字符相同层级的元素应保持相同的缩进 一个常见的yaml文件示例&#xff1a; # 当前yaml文档使用到注释、变量、类对象 …

Xilinx FPGA 权威书籍指南 基于Vivado 2018 集成开发环境

ff4889i Verilog数字系统设计教程_夏宇闻 深入浅出玩转FPGA_吴厚航 《深入浅出玩转FPGA》视频教程&#xff1a;35课时 FPGA项目实例资料合集 FPGA从入门到精通.实战篇 数字逻辑基础与Verilog设计 原书第3版 ,斯蒂芬布朗 Xilinx FPGA 权威书籍指南 基于Vivado 2018 集成开…

ABS10-ASEMI智能LED灯具专用ABS10

编辑&#xff1a;ll ABS10-ASEMI智能LED灯具专用ABS10 型号&#xff1a;ABS10 品牌&#xff1a;ASEMI 封装&#xff1a;ABS-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;1A 功率(Pd)&#xff1a;50W 芯片个数&#xff1a;4 引脚数…

曲线生成 | 图解三次样条曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 什么是样条&#xff1f;2 三次样条曲线原理2.1 曲线插值2.2 边界条件2.3 系数反解 3 算法仿真3.1 ROS C仿真3.2 Python仿真3.3 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细…

研学活动报名系统源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景&#xff1a; 随着教育水平的提高和人们对综合素质培养的需求增加&#xff0c;研学活动作为一种教育方式受到了广大家长和学生的青睐。为了更好地组织和管理研学活动&#xff0c;需要建立一个研学活动报名系统&#xf…

C#,入门教程(22)——函数的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(21)——命名空间&#xff08;namespace&#xff09;与程序结构的基础知识https://blog.csdn.net/beijinghorn/article/details/124140653 一、函数的基本概念 一个软件的结构大体如下&#xff1a; 大厦application: a plaza { --…