今天的leetcode最后一题是动态规划,比较难,适合对DP比较熟练的童鞋去完成,讲起来也比较费劲,这里就只讲下第二道和第三道题,第一道水题略过。

5603. 确定两个字符串是否接近

题目内容:

如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :

操作 1:交换任意两个 现有 字符。

例如,abcde -> aecdb

操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。

例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )

你可以根据需要对任意一个字符串多次使用这两种操作。

给你两个字符串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否则,返回 false 。

解题思路:

刚开始看题目差点用DP的思路去解题,仔细思考后发现这道题是有规律的。

这道题输入2个字符串a和b,看是否能从a通过操作1、2转换为b。

对于操作1,任意交换2个现有字符,不管怎样交换,字符串里面的字符不会变化,也就是说,a和b的长度肯定是一样的,并且拥有的字符集也一样。

对于操作2,可以转换任意2个类型的字符,那么这里转换后,每个字符的数量按大小排序后是不变的,只要保证2个字符串中字符数量一致,那么就可以转换。

代码如下:

class Solution {public:bool closeStrings(string word1, string word2) {if(word1.length() != word2.length()){return false;}std::vector<int> w1(26);std::vector<int> w2(26);for(auto v:word1){w1[v-'a']++;}for(auto v:word2){w2[v-'a']++;// 相同字符if(w1[v-'a'] == 0){return false;}}// 数量相同std::sort(w1.begin(), w1.end());std::sort(w2.begin(), w2.end());for(auto i=0; i<26; i++){if(w1[i] != w2[i]){return false;}}return true;}
};

5602. 将 x 减到 0 的最小操作数

题目内容:

给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。

如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。

解题思路:

这个题目如果直接做,需要处理两端的数据,处理起来很难受,一开始就是这种思路的,用搜索的方法解题,这道题和leetcode经典的子数组求和很像,然而这次是反着来的。

题目意思是从左边或者右边减去一个元素,使得剪掉的总值恰好是x。

反着理解其实就是:数组nums的子数组中,和为sum(nums)-x的子数组是否存在。

于是题目变得比较简单,子数组求和就是前缀和处理。

class Solution {public:int minOperations(vector<int>& nums, int x) {int left = 0;int right = left +1;int target = 0;for(int i=0; i<nums.size();i++){target += nums[i];}int res = -1;target -= x;if(target ==0){return nums.size();}int temp = nums[left] + nums[right];while(left<=right && right <nums.size()){if(temp == target){res = max(right-left+1, res);}if(temp <= target){right ++;temp += nums[right];}else if(temp >target){left ++;temp -= nums[left-1];}}if(res == -1)return res;return nums.size() - res;}
};

做题总结:

通过上面的2题目,可以发现都是将原有的题意做了一次转换,在转换后的思路上曲线解题,这样解题思路会很简单,并且效率也高,代码可读性也会好一些。

好了,这就是这周的算法题解,小编算法水平有限,第四题看了下没做出来,题解理解起来也比较花时间,就不在这篇文章里详细说明了。下周继续~

个人公众号:ACM算法日常

专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、软件设计等。

Leetcode 周赛题解 215相关推荐

  1. 【LeetCode 周赛题解】第338场周赛题解

    题目列表 6354. K 件物品的最大和(easy) 6355. 质数减法运算(medium) 6357. 使数组元素全部相等的最少操作次数(medium) 6356. 收集树中金币(hard) 63 ...

  2. 宝宝也能看懂的 leetcode 周赛 - 174 - 3

    1339. 分裂二叉树的最大乘积 Hi 大家好,我是张小猪.欢迎来到『宝宝也能看懂』系列之 leetcode 周赛题解. 这里是第 174 期的第 3 题,也是题目列表中的第 1339 题 -- 『分 ...

  3. LeetCode第 227 场周赛题解

    LeetCode第 227 场周赛题解 检查数组是否经排序和轮转得到 原题链接 https://leetcode-cn.com/problems/check-if-array-is-sorted-an ...

  4. 20200814:力扣201周周赛题解记录上

    力扣201周周赛题解记录上 题目 思路与算法 代码实现 写在最后 题目 整理字符串 找出第 N 个二进制字符串中的第 K 位 思路与算法 第一题这种类似消消乐的东西都是直接用栈来实现的,注意代码细节 ...

  5. 20200728:力扣199周周赛题解(上)

    199周周赛题解 题目一:重新排列字符串 给你一个字符串s和一个长度相同的整数数组indices. 请你重新排列字符串s,其中第i个字符需要移动到indices[i]指示的位置. 返回重新排列后的字符 ...

  6. C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)

    C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN ...

  7. 我也是LeetCode周赛“三道题选手”啦 第270场周赛

    第270场周赛小结 我的Weekly Contest 270战况 什么是LeetCode周赛? show my code! 复盘解决Hard题 我的Weekly Contest 270战况 参加周赛有 ...

  8. 20210530:力扣第53场双周赛题解

    力扣第53场双周赛题解 题目 思路与算法 代码实现 写在最后 题目 长度为三且各字符不同的子字符串 数组中最大数对和的最小值 矩阵中最大的三个菱形和 思路与算法 长度为三且各字符不同的子字符串:遍历查 ...

  9. 20201219:力扣219周周赛题解

    力扣219周周赛题解 题目 思路与算法 代码实现 复杂度分析 题目 比赛中的配对次数 十-二进制数的最少数目 石子游戏 VII 堆叠长方体的最大高度 思路与算法 比赛中的配对次数 两两比赛,淘汰剩一支 ...

最新文章

  1. 织梦缩略图php,dedecms怎么实现列表页缩略图随机调用
  2. [oracle]分区表学习
  3. OSChina 周四乱弹 ——程序员怎么撩外国妹子攻略
  4. 深度学习-参数与超参数
  5. Android adb不是内部或外部命令 问题解决
  6. 如何设置dedecms自定义表单必填项?
  7. 台灯的内置和外置是什么意思_外置污水提升装置有哪些优势
  8. 服务器系统哪个版本速度快,Windows服务器操作系统哪个版本好?
  9. kindeditor用法简介
  10. local_listener参数(2)---elaine
  11. 如何查看哪些期刊被SCI收录
  12. PyTorch(二次元头像--GAN实战)
  13. Selenium学习 - 库代码解析
  14. 嵌入式课程学习 嵌入式硬件工程师需要学习哪些内容?
  15. 背书小程序正式上线啦
  16. Clickhouse 分布式子查询——global in/join(慎用慎用)
  17. 图表制作中需要注意哪些问题:认识图表、选择图表
  18. 前端LayUI框架快速上手详解(一)
  19. 鼠标事件(事件类型)
  20. 涉密信息系统集成资质申请单位提交材料清单

热门文章

  1. PowerPoint!让教学更精彩:PPT课件高效制作
  2. Cauchy-Schwarz Inequality
  3. 人民大学的AI学院,教师团队很凡尔赛
  4. vue3 provide inject用法
  5. Pytorch遇到权重不匹配的问题
  6. 等保三级网络安全相关设备加固笔记
  7. 【vue2】子组件向父组件传参方法汇总
  8. Solidworks篮球建模
  9. C语言中整形的大小和范围
  10. PPPOE拨号之四:juniper netscreen 防火墙 PPPOE拨号配置