leetcode 242. 有效的字母异位词 思考分析

题目

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
在这里插入图片描述
我们先考虑低阶版本,认为字符只有26种可能,然后将a ~ z的字符映射到数组的索引0 ~ 25,数组中存放的则是该索引出现的频次。
记录下s的频次和t的频次,然后比较是否相同,相同则是字母异位词(出现的字母种类一样多且每种出现的频次一样多)。
这里为了节省空间我们选择直接在原数组上进行减法。
代码:

class Solution {
public:int nums[26];bool isAnagram(string s, string t) {//将字符映射到数组上for(int i=0;i<s.size();i++) {int index = s[i] - 'a';nums[index]++;}//for(int i=0;i<t.size();i++) {int index = t[i] - 'a';nums[index]--;}for(int i=0;i<26;i++){if(nums[i]!=0) return false;}return true;}
};

对上面的代码进行时间优化:

class Solution {
public:int nums[26];bool isAnagram(string s, string t) {if(s.size() != t.size()) return false;//将字符映射到数组上for(int i=0;i<s.size();i++) {int index = s[i] - 'a';nums[index]++;}for(int i=0;i<t.size();i++) {int index = t[i] - 'a';nums[index]--;if(nums[index]==-1) return false;}return true;}
};

在遍历数组t的时候,计算nums[index]的值,如果不是异位词汇且两者字符数量一致,在nums数组中必定有差小于0的,这里我们取-1即可。为何不能取>0呢?因为我们是在遍历的过程中从大到小删减频次,所以一开始肯定都是>0的。
对于进阶版本,这边直接贴力扣官方答案:
使用哈希表而不是固定大小的计数器。想象一下,分配一个大的数组来适应整个 Unicode 字符范围,这个范围可能超过 100万。哈希表是一种更通用的解决方案,可以适应任何字符范围。

思路2

我们这边使用c++的容器,不使用数组。但是原理都是一样的。

class Solution {
public:bool isAnagram(string s, string t) {if(s.size() != t.size()) return false;unordered_map<char, int> map;for(int i=0;i<s.size();i++){map[s[i]] ++;}for(int i=0;i<t.size();i++){map[t[i]]--;if(map[t[i]]==-1) return false;}return true;}
};

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

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

相关文章

总结一下ERP .NET程序员必须掌握的.NET技术,掌握了这些技术工作起来才得心应手...

从毕业做.NET到现在&#xff0c;有好几年了&#xff0c;自认为只能是达到熟练的水平&#xff0c;谈不上精通。所以&#xff0c;总结一下&#xff0c;自己到底熟练掌握了哪些.NET方面的开发技术&#xff0c;以此对照&#xff0c;看看还有哪些不足&#xff0c;欢迎补充。 1 .NET …

js \n直接显示字符串_显示N个字符的最短时间

js \n直接显示字符串Problem statement: 问题陈述&#xff1a; You need to display N similar characters on a screen. You are allowed to do three types of operation each time. 您需要在屏幕上显示N个相似的字符。 每次允许您执行三种类型的操作。 You can insert a c…

示例 Demo 工程和 API 参考链接

Camera Explorer&#xff1a;有关 Windows Phone8 中有关增强 Camera API 的使用。文章链接 Filter Effects&#xff1a;对拍摄的照片或者图片库中的照片应用 Nokia Imaging SDK 中的滤镜。文章链接 Filter Explorer&#xff1a;演示了对新拍摄图片或者现有图片的编辑功能&…

三、标签准备

所有操作均在anaconda中的自己配置的环境下进行 一、安装labelimg 因为YOLO模型所需要的样本标签必须是txt类型&#xff0c;本人使用labelimg软件进行对图像进行打标签操作。 pip install pycocotools-windows pip install pyqt5 pip install labelimg 通过labelimg命令打…

ubuntu 8.04安装应用软件Can't find X includes错误解决办法

系统很小。应用软件都的自己装。 首先把 APT’s database is not updated. # apt-get update    # apt-get upgrade 再装其它软件。 make xconfigure 无法运行时&#xff1a; apt-get install qt3-dev-tools 编译QVFB  是出现&#xff1a; 出现&#xff1a;C preproces…

leetcode 39. 组合总和 思考分析

目录1、题目2、思考分析3、未经优化代码4、剪枝优化1、题目 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 2、思考分析 解空间树宽度部分即数…

java uuid静态方法_Java UUID equals()方法与示例

java uuid静态方法UUID类equals()方法 (UUID Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this object equals to the given object or not. equals()方法用于检…

一、机器学习概念

一、何为机器学习(Mechine Learning)&#xff1f; 答&#xff1a;利用已有数据(经验)&#xff0c;来训练某种模型&#xff0c;利用此模型来预测未来。机器学习是人工智能的核心Mechine Learning。 例如&#xff1a;你和狗蛋儿7点在老槐树下集合&#xff0c;如何一块约去开黑&a…

Java线程新特征——Java并发库

一、线程池 Sun在Java5中&#xff0c;对Java线程的类库做了大量的扩展&#xff0c;其中线程池就是Java5的新特征之一&#xff0c;除了线程池之外&#xff0c;还有很多多线程相关的内容&#xff0c;为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序&#xff0c;…

第一篇博文

刚刚申请博客&#xff0c;开通了&#xff0c;很高兴。但是由于这几天考试比较多&#xff0c;等考完之后&#xff0c;再开始正式写博客&#xff0c;与诸君共进步&#xff01; 2012/1/1 18:20 转载于:https://www.cnblogs.com/zhenglichina/archive/2012/01/01/2309561.html

leetcode 40. 组合总和 II 思考分析

题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 思考以及代码 如果我们直接套用39题的思路&#xff0c;那么就会出现重复的组合。 重复组合的…

java vector_Java Vector size()方法与示例

java vector矢量类size()方法 (Vector Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the size (i.e. the number of the element exists) of this Vector. size()方法用于返回此V…

二、线性回归

一、回归 可以拿正态分布为例&#xff0c;比如身高&#xff0c;若平均身高为1.78m&#xff0c;绝大多数人都是1.78m左右&#xff0c;超过2m的很少&#xff0c;低于1m的也不多。 很多事情都会回归到一定的区间之内&#xff0c;即回归到平均值。 机器学习没有完美解&#xff0c…

【转】HMM学习最佳范例五:前向算法1 .

五、前向算法&#xff08;Forward Algorithm&#xff09; 计算观察序列的概率&#xff08;Finding the probability of an observed sequence&#xff09; 1.穷举搜索&#xff08; Exhaustive search for solution&#xff09;  给定隐马尔科夫模型&#xff0c;也就是在模型参…

vs 字体

看代码看得眼疼不能不说是程序员的恶梦&#xff0c;那么&#xff0c;选择适当的字体也算是对自己的救赎吧。周末闲得无聊&#xff0c;在网上乱逛&#xff0c;搜索了一些资料整理一下给大家分享&#xff0c;仅作记录而已&#xff0c;参考使用&#xff1a; 1.一个编程人员痛苦的选…

leetcode 349. 两个数组的交集 思考分析

题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 1、暴力双for循环 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> result;vector<int> res;if(nums1.siz…

random.next_Java Random next()方法与示例

random.next随机类的next()方法 (Random Class next() method) next() method is available in java.util package. next()方法在java.util包中可用。 next() method is used to return the pseudo-random number in bits. next()方法用于返回以位为单位的伪随机数。 next() me…

VS2008下QT开发环境搭建

http://blog.csdn.net/sunnyboycao/article/details/6364444 转载于:https://www.cnblogs.com/bjfuyumu/p/3321180.html

三、梯度下降法求解最优θ值

一、梯度下降法(GD&#xff0c;Gradient Descent) Ⅰ、得到目标函数J(θ)&#xff0c;求解使得J(θ)最小时的θ值 当然&#xff0c;这里只是取了俩特征而已&#xff0c;实际上会有m个特征维度 通过最小二乘法求目标函数最小值 令偏导为0即可求解出最小的θ值&#xff0c;即…

Delphi中Messagedlg用法

if MessageDlg(Welcome to my Delphi application. Exit now?, mtConfirmation, [mbYes, mbNo], 0) mrYes then begin Close; end;MessageDlg用法 对话框类型&#xff1a;mtwarning——含有感叹号的警告对话框mterror——含有红色叉符号的错误对话框mtinformation——含有蓝…