【LeetCode】每日一题 2023_11_30 确定两个字符串是否接近 (数组、排序、哈希/位运算、脑筋急转弯)

本文主要是介绍【LeetCode】每日一题 2023_11_30 确定两个字符串是否接近 (数组、排序、哈希/位运算、脑筋急转弯),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 刷题前唠嗑
  • 题目:确定两个字符串是否接近
    • 题目描述
    • 代码与解题思路
  • 结语

刷题前唠嗑


LeetCode?启动!!!

刷完今天,我的每日一题就坚持一个月啦,月度勋章要到手啦

今早很尴尬,明明已经 12 点这么早睡觉了,结果早上 10 点才起床,只能说可能是最近这段时间熬夜确实比较重,身体见到有机会就趁机调养一下,这也是我早睡的目的啦

题目:确定两个字符串是否接近

题目链接:1657. 确定两个字符串是否接近

题目描述

代码与解题思路

func closeStrings(word1 string, word2 string) bool {c1, c2 := make([]int, 26), make([]int, 26)for _, v := range word1 {c1[v-'a']++}for _, v := range word2 {c2[v-'a']++}sort.Ints(c1)sort.Ints(c2)for i := 0; i < 26; i++ {if c1[i] != c2[i] {return false}}return true
}

上面代码是错的,我一开始理解错题目的意思了,我以为只要字母之间是可以任意替换的,其实不是,两个品种的字母之间想要替换需要保证他们的数量是相同的才行,举个例子:

  1. “aabbcc” 和 “aaaabc” 是没法替换的
  2. “abbbbc” 和 “accccb” 才能替换,因为 b 和 c 两个品种的数量相等

正确代码:

func closeStrings(word1 string, word2 string) bool {if len(word1) != len(word2) {return false}var c1, c2 [26]intfor _, v := range word1 {c1[v-'a']++}for _, v := range word2 {c2[v-'a']++}for i := 0; i < 26; i++ {if c1[i] == 0 && c2[i] == 0 { // 如果都不存在这个数字,就继续遍历continue}if c1[i] == 0 || c2[i] == 0 { // 一个存在一个不存在,返回 falsereturn false}}slices.Sort(c1[:])slices.Sort(c2[:])return slices.Equal(c1[:], c2[:])
}

这道题目说难不难,说简单也不简单,如标题,脑筋急转弯,你只需要想清楚两个点,这道题就非常容易了:

  1. 想要成功替换让两个数组相等,他们的长度必须相同。这就是第一行代码做的事情
  2. 题目支持字母之间的平替,也就是在字符串长度相同的情况下,两个字符串的字母的不同品种之间的数量相同也能满足要求。这就是后面那一大段代码做的事情,就是判断这个

所以这道题肯定是可以用位运算来做的,不过我比较懒,就不实现了

结语

开心

这篇关于【LeetCode】每日一题 2023_11_30 确定两个字符串是否接近 (数组、排序、哈希/位运算、脑筋急转弯)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437260

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v