leetcode:389. 找不同

news/2024/11/9 10:18:37/

一、题目

函数原型: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.ppmy.cn/news/1195509.html

相关文章

web3 React dapp中编写balance组件从redux取出并展示用户资产

好啊 上文WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量中 我们拿到了用户的一个本身 和 交易所token数量 并放进了redux中做了一个全局管理 然后 我们继续 先 起来ganache的一个模拟环境 ganache -d然后 我们启动自己的项目 顺手发…

java实现单点登录

以下是使用Java实现单点登录功能的示例代码&#xff1a; SSO服务器端代码 SSO服务器使用Spring Boot框架实现&#xff0c;主要的部分如下&#xff1a; // SSO服务器端控制器 RestController public class SsoController {// 模拟用户账号信息private static final Map<St…

nodejs express uniapp 图书借阅管理系统源码

开发环境及工具&#xff1a; nodejs&#xff0c;mysql5.7&#xff0c;HBuilder X&#xff0c;vscode&#xff08;webstorm&#xff09; 技术说明&#xff1a; nodejs express vue elementui uniapp 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示轮播图&am…

代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I

739. 每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来…

Redis常见风险分析

击穿 概念&#xff1a;在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。 引发击穿的原因&#xff1a; 第一次访问恶意访问不存在的keyKey过期 合理的规避方案&#xff1a; 服务器启动时, 提前写入规范key的命名, 通过中间件拦截对…

东北大学python大作业

目前金属矿开采&#xff0c;爆破还是主要的破岩方式&#xff0c;为了保证巷道采场的安全&#xff0c;需要对爆破震动进行监测&#xff0c;获取的监测数据如附件&#xff0c;第1列数据为震动的序号&#xff0c;第2、3、4列为x,y,z三个方向的震动速度&#xff0c;往往由于各种因素…

发邮件时我可以不是我

大家好&#xff0c;才是真的好。 Notes/Domino 12.0有一项新特性&#xff0c;即启用备用发件人功能&#xff0c;从一个邮箱当中发送邮件&#xff0c;可以选定不同的用户邮箱身份&#xff0c;继而我不是我。 这在某些情况下特别实用。比如有人使用Notes客户端来接收163或Gmail…

您对互联网有多“上瘾”?

萨里大学的科学家决定检查现代用户的网络成瘾程度。他们的一篇文章最近发表在 《旅行与旅游营销杂志》上 &#xff0c;其中包含对受此问题困扰的年轻人&#xff08;而不仅仅是年轻人&#xff09;的研究和分类结果。 796名不同年龄段的人参加了实验。科学家们仔细监测了他们的行…