leetcode:389. 找不同

news2024/11/26 8:07:30

一、题目

函数原型:char findTheDifference(char * s, char * t)

二、思路

作者原先的思路是先将两个字符串从小到大排序,然后两个字符串依次比较。若出现字符串t中的元素和字符串s不相等,则说明该元素就是被添加的字母。

但是,该算法时间上仅仅击败13.33%的人,效率极低。

int cmp(const void *e1,const void *e2)
{
    return *(char*)e1 - *(char*)e2;
}

char findTheDifference(char * s, char * t){
    int sz1=strlen(s);
    int sz2=strlen(t);
    qsort(s,sz1,1,cmp);
    qsort(t,sz2,1,cmp);

    int i=0;
    for(i=0;i<sz1;i++)
    {
        if(s[i]!=t[i]&&s[i]==t[i+1])
        {
            return t[i];
        }
    }
    return t[i];
}

下面介绍几种时间效率比较高的算法:

思路1:

利用找单身狗的思想,详见:《leetcode:136. 只出现一次的数字(找单身狗)》

将两个字符串全部进行异或运算,最后得到的就是只出现一次的字母,即被添加的字母

char findTheDifference(char* s, char* t) {
    char result=0;
    int sz1=strlen(s);
    int sz2=strlen(t);
    for(int i=0;i<sz1;i++)
    {
        result^=s[i];
    }
    for(int i=0;i<sz2;i++)
    {
        result^=t[i];
    }
    return result;
}

思路2:

用字符串t的字母总和减去字符串s的字母总和,因为相同字母相减结果为0,所以剩下的就是被添加的字母

char findTheDifference(char* s, char* t) {
    char result=0;
    int sz1=strlen(s);
    int sz2=strlen(t);
    for(int i=0;i<sz2;i++)
    {
        result+=t[i];
    }
    for(int i=0;i<sz1;i++)
    {
        result-=s[i];
    }
    return result;
}

思路3:

设置一个大小为26的数组(初始值为0),字母 a-z 分别对应位置 0-25 ,通过各字母通过减去a可以转换为对应的数字。先遍历字符串s,当某个字母出现其对应的位置就+1;再遍历字符串t,当某个字母出现其对应位置就-1。最后若某个位置变为了-1,说明该字母在s中未出现,在t中出现了,该字母就是被添加的字母,返回该字母即可。

char findTheDifference(char* s, char* t) 
{
    int nums[26]={0};
    memset(nums,0,sizeof(nums));
    int sz1=strlen(s);
    int sz2=strlen(t);
    for(int i=0;i<sz1;i++)
    {
        nums[s[i]-'a']++;
    }
    for(int i=0;i<sz2;i++)
    {
        nums[t[i]-'a']--;
        if(nums[t[i]-'a']==-1)
            return t[i];
    }
    return ' ';
}

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

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

相关文章

在Spring中,教你一招优雅的获取国际化语言配置的方法

在Spring中,可以将国际化语言放到HTTP请求头部,以便后端程序能够获取并解析该语言。一种常见的方式是使用Accept-Language标头字段来设置语言。下面是一个示例代码,演示如何从HTTP请求头部获取该字段的值: 在 Spring 中,可以通过 HttpServletRequest 对象获取 HTTP 头部信…

【Spring】SpringWebMVC入门

Spring Web MVC入门 什么是SpringWebMVCMVC定义什么是SpringMVC 学习SpringMVC建立连接RequestMapping注解RequestMapping使用 请求传递单个参数传递多个参数传递对象后端参数重命名传递数组传递集合传递JSON获取URL中参数pathVariable上传文件RequestPart获取Cookie/Session获…

【市场分析】Temu数据采集销售额商品量占比分析数据分析接口Api

引言 temu电商平台是一个充满活力的电商平台&#xff0c;拥有多种商品类别和数万家店铺。在这个项目中我的任务是采集平台上的大量公开数据信息。通过数据采集&#xff0c;我旨在深入了解temu电商平台的产品分布、销售趋势和文本描述&#xff0c;以揭示有趣的见解。 数据采集…

Java web(四):JSP

文章目录 一、JSP1.1 概述1.2 JSP入门1.3 JSP脚本1.4 缺点 二、EI表达式三、JSTL3.1 标签3.2 JSTL使用3.3 代码演示 四、MVC模式和三层架构五、项目实战【完成增删改查】 一、JSP 1.1 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服…

【UE 材质】简单的闪闪发光材质

效果 节点 参考视频&#xff1a; https://www.bilibili.com/video/BV1uK411y737/?vd_source36a3e35639c44bb339f59760641390a8

自动化测试--验证邮件内容

场景 业务上有许多发送邮件的场景&#xff0c;发送的邮件基本上都是自动发送的&#xff0c;而且邮件内容是很重要的&#xff0c;对于邮件发没发送&#xff0c;发送的时间点对不对每次回归测试工作量太大了&#xff0c;所以考虑把这部分内容加入到自动化测试中 工具 python g…

精选8款UML图工具,闭眼入!

在现代软件开发领域&#xff0c;UML&#xff08;统一建模语言&#xff09;图是不可或缺的工具之一&#xff0c;用于可视化和通信复杂系统的结构和设计。然而&#xff0c;在选择合适的UML图工具时&#xff0c;你需要考虑多个因素&#xff0c;如项目规模、团队协作需求、功能复杂…

【Unity实战】最全面的库存系统(四)

文章目录 先来看看最终效果前言问题新增数据库,自动添加物品唯一ID物品配置唯一的ID替换原来的instanceID丢弃物品每次只丢弃一个物品问题完结先来看看最终效果 前言 本期紧跟着上期,继续来完善我们的库存系统,实现存储物品唯一ID和加载功能,丢弃物品功能 问题 instance…

【方法】如何解压ZIP格式压缩文件?

ZIP是一种常见的压缩文件格式&#xff0c;可以将一个或多个文件和文件夹打包成单个文件&#xff0c;以减少存储空间和传输时间。那想要读取压缩包里的文件&#xff0c;要如何解压呢&#xff1f; 压缩和解压压缩包&#xff0c;都需要用到解压缩软件&#xff0c;下面来分享一下3…

一键翻译,批量重命名,让文件夹名更贴心!

在日常生活和工作中&#xff0c;我们经常需要处理大量的文件夹。有时候&#xff0c;我们需要根据特定的需求对这些文件夹进行重命名。但是&#xff0c;手动重命名每个文件夹不仅耗时且容易出错。现在&#xff0c;我们的文件改名工具为你提供了一键翻译、批量重命名的便捷服务&a…

C语言调试技巧(debug)及程序运行时出现的问题

目录 一、什么是调试 1.介绍调试 2.Debug与Release 3.Debug与Release的对比 二、怎么调试 1.介绍几个调试快捷键 2.调试的时候查看程序当前信息 三、常见编程错误 1.编译型错误&#xff08;最简单&#xff09; 2.链接型错误 3.运行时错误&#xff08;最难&#xff0…

stm32F407系列控制板用户手册

stm32F407系列控制板用户手册 文章目录 stm32F407系列控制板用户手册1.外观和接口标注2.功能3.参数4.应用场景 1.外观和接口标注 2.功能 智能配网远程控制多路舵机接口多路电机接口姿态实时采集ps 接口oled屏OTA固件一键升级语音控制-需借助app语音识别功能预留can接口预留多个…

IPMI接口配置

1.IPMI接口和RJ45的网口外观上一样&#xff0c;一般主板上带有的IPMI接口会和网卡分开放置&#xff0c;具体区分还要看主板的Specification&#xff0c;下面红色部分的即为IPMI接口 2.找到IPMI接口后&#xff0c;我们要接上一根网线。然后开机进入BIOS&#xff0c;具体按那个…

请一个折腾了5个月AI绘画的人来讲讲GPU选择的经验,没入坑的看他这一篇就足够了

一个折腾了5个月AI绘画的人来讲讲经验&#xff0c;基本上入坑只需要看这一篇就可以了。 不说废话&#xff0c;首先&#xff0c;将显卡分成专业级和家用级。然后两个级别里面再各分高中低一共6档&#xff0c;我一档一档说&#xff0c;包括大家关心的移动版显卡以及显存升级问题…

备忘录在电脑里叫什么?Win10系统自带的备忘录在哪打开?

对于每天都需要使用电脑来办公的职场人士来说&#xff0c;能够随手在电脑桌面上记录工作笔记、常用工作资料、工作注意事项等内容是非常有必要的。但是如果想要实现在电脑上随手记录事情&#xff0c;就需要先找到一款类似于备忘录或便签软件那样的记事软件。 那么备忘录在电脑…

datagrip出现 java.net.ConnectException: Connection refused: connect.

出现这样的情况要看一下hadoop有没有启动 start-all.sh nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 & scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/ /export/server/apache-hive-3.1.2-bin/bin/hive show databa…

Linux - 安装Ubuntu虚拟机

1&#xff0c;安装VMware Workstation 16 Player&#xff0c;然后运行。 2&#xff0c;选择安装一个新的虚拟机和之后安装操作系统。 3&#xff0c;选择Linux Ubuntu 64-bit 4&#xff0c;填写虚拟机名字和存放的路径。 5&#xff0c;选择硬盘大小。 6&#xff0c;可以定制硬…

Appium 结合 TestNG 并行执行测试

Appium 测试框架可以让我们使用不同的编程语言&#xff08;Java、Python、Ruby、JavaScript&#xff09;测试不同移动端平台的应用&#xff08;Android、iOS&#xff09;&#xff0c;目前也是最火的移动端测试框架。这篇文章会带着大家学习到如何在不同设备中并行执行测试。 并…

Oracle数据库两表关联更新

先放结论 UPDATE 需要更新的表名 BSET B.更新字段1 更新内容1, B.更新字段2 更新内容2WHERE EXISTS (SELECT 1FROM 关联表名 AWHERE A.关联字段 B.关联字段AND A.筛选字段1 筛选字段1 AND A.筛选字段2 筛选字段2 AND B.筛选字段3 筛选字段3 );问题分析 需要写一个更新语…

凝聚伙伴力量,共赢产业未来—— 麒麟信安云展信创重庆站活动圆满召开

志合越山海&#xff0c;聚力共前行&#xff01;11月1日下午&#xff0c;麒麟信安云展信创重庆站圆满召开。 本次活动邀请业内专家、权威机构、行业客户、合作伙伴齐聚一堂&#xff0c;围绕产业新机遇、新挑战&#xff0c;产业政策及趋势等内容展开研讨交流&#xff0c;同时分享…