每日一题——LeetCode859

方法一 个人方法:

  1. 首先s和goal要是长度不一样或者就只有一个字符这两种情况可以直接排除
  2. 剩下的情况s和goal的长度都是一样的,s的长度为2也是特殊情况,只有s的第一位等于goal的第二位,s的第二位等于goal的第一位才能满足
  3. 剩下的我们需要统计s的goal的哪几位字符是不一样的,并用数组保存不同的位置
  4. 如果不同的位数等于1那么无论怎么交换都不能满足,不同的位数大于2那么只交换一次也不能满足
  5. 如果没有不同的字符,说明s和goal是一样的字符串,这种情况只需要s或者goal有任意一个字符出现了两次及以上,把相同的字符互相调换,它还是原来的字符串
var buddyStrings = function(s, goal) {
    if(s.length!=goal.length || s.length<=1){
        return false
    }

    if(s.length==2){
        if(s[0]===goal[1] && s[1]===goal[0]) return true
        else return false 
    }
    var diff=[]
    for(var i=0;i<s.length;i++){
        if(s[i]!=goal[i]){
            diff.push(i)
        }
    }

    if(diff.length===2){
        if(s[diff[0]]===goal[diff[1]] && s[diff[1]]==goal[diff[0]]) return true
        else return false
    }
    else if(diff.length===1 || diff.length>2) return false
    else{
        var set = new Set(s)
        return s.length===set.size?false:true
    }
};

消耗时间和内存情况:

方法二 官方解法:

思路差不太多,我把情况分的太细了啰嗦了一点,官方解法思路更加直接精确

设i和j为需要交换的字符的位置,如果满足交换 s[i] 和 s[j]后两个字符串相等,那么需要满足以下几个条件使得 s 和 goal为亲密字符串:

  • 字符串 sss 的长度与字符串 goal\textit{goal}goal 的长度相等;
  • 存在 i≠j 且满足 s[i]=goal[j]以及 s[j]=goal[i],实际在 s[i],s[j],goal[i],goal[j]这四个自由变量中,只存在两种情况:

  1. 满足 s[i]=s[j]:则此时必然满足 s[i]=s[j]=goal[i]=goal[j],字符串 s 与 goal相等,我们应当能够在 s中找到两个不同的索引 i,j,且满足 s[i]=s[j],如果能够找到两个索引不同但值相等的字符则满足 s与 goal 为亲密字符串;否则不为亲密字符串。

  2. 满足 s[i]≠s[j]:满足 s[i]=goal[j],s[j]=goal[i],s[i]≠s[j]的情况下,两个字符串 s 与 goal除了索引 i,j 以外的字符都是匹配的。

var buddyStrings = function(s, goal) {
    if (s.length != goal.length) {
        return false;
    }
    
    if (s === goal) {
        const count = new Array(26).fill(0);
        for (let i = 0; i < s.length; i++) {
            count[s[i].charCodeAt() - 'a'.charCodeAt()]++;
            if (count[s[i].charCodeAt() - 'a'.charCodeAt()] > 1) {
                return true;
            }
        }
        return false;
    } else {
        let first = -1, second = -1;
        for (let i = 0; i < s.length; i++) {
            if (s[i] !== goal[i]) {
                if (first === -1)
                    first = i;
                else if (second === -1)
                    second = i;
                else
                    return false;
            }
        }

        return (second !== -1 && s[first] === goal[second] && s[second] === goal[first]);
    }
};

作者:力扣官方题解
来源:力扣(LeetCode)

消耗时间和内存情况: 

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

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

相关文章

生成allure报告出现:ALLURE REPORT UNKNOWN

问题&#xff1a;点击浏览器查看时无法查看到报告 错误代码&#xff1a; if __name__ "__main__":pytest.main([./test_study/test_fixture.py])os.system("allure generate ./temps -o ./temps --clean") 结果导向&#xff1a; 解决&#xff1a;因为…

ZooKeeper 使用介绍和原理详解

目录 1. 介绍 重要性 应用场景 2. ZooKeeper 架构 服务角色 数据模型 工作原理 3. 安装和配置 下载 ZooKeeper 安装和配置 启动 ZooKeeper 验证和管理 停止和关闭 4. ZooKeeper 数据模型 数据结构和层次命名空间&#xff1a; 节点类型和 Watcher 机制&#xff…

SpringMVC:整合 SSM 上篇

文章目录 SpringMVC - 03整合 SSM 上篇一、准备工作二、MyBatis 层1. dao 层2. service 层 三、Spring 层四、SpringMVC 层五、执行六、说明 SpringMVC - 03 整合 SSM 上篇 用到的环境&#xff1a; IDEA 2019&#xff08;JDK 1.8&#xff09;MySQL 8.0.31Tomcat 8.5.85Maven…

OpenCV利用HSV颜色区间分离不同物体

需求 当前有个需求是从一个场景中将三个不同的颜色的二维码分离出来&#xff0c;如下图所示。 这里有两个思路可以使用 思路一是通过深度学习的方式&#xff0c;训练一个能够识别旋转边界框的模型&#xff0c;但是需要大量的数据进行模型训练&#xff0c;此处缺少训练数据&a…

WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER.

Hadoop启动时警告&#xff0c;但不影响使用&#xff0c;强迫症的我还是决定寻找解决办法 WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.原因是Hadoop安装配置于root用户下&#xff0c;对文件需要进…

智能优化算法应用:基于金枪鱼群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金枪鱼群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金枪鱼群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金枪鱼群算法4.实验参数设定5.算法结果6.…

深度学习(八):bert理解之transformer

1.主要结构 transformer 是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如自然语言处理任务。它在 2017 年由 Vaswani 等人在论文 “Attention is All You Need” 中提出。 Transformer 的主要特点是它完全放弃了传统的循环神经网络&#xff08;RNN&#x…

PHP函数定义和分类

函数的含义和定义格式 在PHP中&#xff0c;允许程序员将常用的流程或者变量等组件组织成一个固定的格式实现特定功能&#xff0c;也就是说函数是具有特定功能特定格式的代码段。 函数的定义格式如下&#xff1a; function 函数名(参数1&#xff0c;参数2&#xff0c;参数n) {…

适配器模式学习

适配器模式&#xff08;Adapter&#xff09;将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式两种&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要…

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Computing…

RasaGPT对话系统的工作原理

RasaGPT 结合了 Rasa 和 Langchain 这 2 个开源项目&#xff0c;当超出 Rasa 现有意图(out_of_scope)的时候&#xff0c;就会执行 ActionGPTFallback&#xff0c;本质上就是利用 Langchain 做了一个 RAG&#xff0c;调用 LLM API。RasaGPT 涉及的技术栈比较多而复杂&#xff0c…

如何更好地理解和掌握 KMP 算法?

KMP算法是一种字符串匹配算法&#xff0c;可以在 O(nm) 的时间复杂度内实现两个字符串的匹配。本文将引导您学习KMP算法&#xff0c;阅读大约需要30分钟。 1、字符串匹配问题 所谓字符串匹配&#xff0c;是这样一种问题&#xff1a;“字符串 P 是否为字符串 S 的子串&#xf…

springcloud-gateway-2-鉴权

目录 一、跨域安全设置 二、GlobalFilter实现全局的过滤与拦截。 三、GatewayFilter单个服务过滤器 1、原理-官方内置过滤器 2、自定义过滤器-TokenAuthGatewayFilterFactory 3、完善TokenAuthGatewayFilterFactory的功能 4、每一个服务编写一个或多个过滤器&#xff0c…

Opencv中的滤波器

一副图像通过滤波器得到另一张图像&#xff0c;其中滤波器又称为卷积核&#xff0c;滤波的过程称之为卷积。 这就是一个卷积的过程&#xff0c;通过一个卷积核得到另一张图片&#xff0c;明显发现新的到的图片边缘部分更加清晰了&#xff08;锐化&#xff09;。 上图就是一个卷…

pycharm修改项目文件夹名称

目录 1 修改项目文件夹名称 2 修改代码中的项目名称 1 修改项目文件夹名称 选中项目文件夹&#xff0c;右键&#xff0c;选择refactor-rename。 选择rename project&#xff1a; 然后输入新的项目名称。 此时进入资源管理器&#xff0c;修改项目文件夹的名字&#xff0c;完成…

LangChain 31 模块复用Prompt templates 提示词模板

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

AWD认识和赛前准备

AWD介绍 AWD: Attack With Defence, 北赛中每个队伍维护多台服务器&#xff0c;服务器中存在多个漏洞&#xff0c;利 用漏洞攻击其他队伍可以进行得分,修复漏洞可以避免被其他队伍攻击失分。 一般分配Web服务器&#xff0c;服务器(多数为Linux)某处存在flag(一般在根目录下)&am…

HackTheBox - Medium - Linux - Format

Format Format 是一种中等难度的 Linux 机器&#xff0c;它突出显示了由解决方案的结构方式引起的安全问题。立足点涉及PHP源代码审查&#xff0c;发现和利用本地文件读/写漏洞&#xff0c;并利用Nginx中的错误配置在Redis Unix套接字上执行命令。横向移动包括浏览 Redis 数据…

爬虫工作量由小到大的思维转变---<第二十二章 Scrapy开始很快,越来越慢(诊断篇)>

前言: 相信很多朋友在scrapy跑起来看到速度200/min开心的不得了;可是,越跑到后面,发现速度变成了10-/min;刚开始以为是ip代理的问题,结果根本不得法门... 新手跑3000 ~ 5000左右数据,我相信大多数人没有问题,也不会发现问题; 可一旦数据量上了10W,你是不是就能明显感觉到速度…

力扣(leetcode)1148和1179题(MySQL)

1148.文章浏览I 题目链接&#xff1a;1148.文章浏览I 解答 # Write your MySQL query statement below select distinct author_id as id from Views where author_idviewer_id order by id;1179.重新格式化部门表 题目链接&#xff1a;1179.重新格式化部门表 解答 …