面试金典02(Python)—— 判定是否互为字符重排(简单)
判定是否互为字符重排
概述:给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
输入: s1 = "abc", s2 = "bca"
输出: true 输入: s1 = "abc", s2 = "bad"
输出: false
方法一:暴力循环
思路:最简单粗暴的办法,依次循环两个字符串。但需要注意的是,在第二重循环中需要剔除已经相同的某个字符串。
# 暴力循环
class Solution:def CheckPermutation(self, s1: str, s2: str) -> bool:if len(s1) != len(s2):return Falsefor i in range(len(s1)):if s1[i] not in s2:return Falsefor j in range(len(s2)):if s1[i] == s2[j]:s2 = s2[:j] + s2[j + 1:]breakreturn True
方法二:排序+判断
思路:该算法应用了列表 sort() 方法,再对两个列表判断即可。
# 排序+判断
class Solution:def CheckPermutation(self, s1: str, s2: str) -> bool:s1_list = list(s1)s1_list.sort()s2_list = list(s2)s2_list.sort()s1_new = ''.join(s1_list)s2_new = ''.join(s2_list)return s1_new == s2_new
方法三:collections.Counter()
思路:该算法用到了 collections.Counter() 内置函数,可以快速统计字符串中每个字符出现次数,最后判断即可。
# collections.Counter()
class Solution:def CheckPermutation(self, s1: str, s2: str) -> bool:return Counter(s1) == Counter(s2)
方法三:哈希表
思路:该算法非常巧妙,首先以一个字符串( s1 或 s2 均可)最为哨点,依次循环添加到字典中。再对另外一个字符串依次循环,在已有的字典中做减法,若存在负数,表明不存在。
# 哈希表
class Solution:def CheckPermutation(self, s1: str, s2: str) -> bool:s_dict = {}for i in s1:if i not in s_dict:s_dict[i] = 1else:s_dict[i] += 1for j in s2:if j not in s_dict:s_dict[j] = -1else:s_dict[j] -= 1if s_dict[j] < 0:return Falsereturn True
总结
简单题秀操作!
面试金典02(Python)—— 判定是否互为字符重排(简单)相关推荐
- LeetCode:面试题 01.02. 判定是否互为字符重排————简单
题目 面试题 01.02. 判定是否互为字符重排 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = " ...
- LC: 面试题 01.02. 判定是否互为字符重排
题目: 面试题 01.02. 判定是否互为字符重排. 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 链接:https://leetcode ...
- 判定是否互为字符重排
判定是否互为字符重排 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 ...
- 365天挑战LeetCode1000题——Day 097 神策专场: 判定是否互为字符重排 按身高排序 按位与最大的最长子数组 找到所有好下标 好路径的数目
面试题 01.02. 判定是否互为字符重排 代码实现(排序) class Solution {public:bool CheckPermutation(string s1, string s2) {s ...
- 程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)
1. 题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = &qu ...
- 程序员面试金典01.02. 判定是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = "bca ...
- 文巾解题 面试题 01.02. 判定是否互为字符重排
1 题目描述 2 解题思路 2.1 replace 对每一个在s1中的字符,如果s2中没有,那么说明两个不匹配,返回false:如果s2中有,那么将s2中的一个这个字符换成'' 如果s1全部遍历完了, ...
- 面试题01.02 判定是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 例1: 输入: s1 = "abc", s2 = "bca&q ...
- LeetCode之面试题01.02判定是否互为字符重排
**题目:**给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例: 说明: class Solution {public boolean ...
最新文章
- 【译】Web Components简介
- 网站设计与开发流程图
- 《Photoshop Lab修色圣典(修订版)》—第1课1.6节小河川流而过
- 2009年4月计算机网络原理,全国2009年4月高等教育自学考试计算机网络原理
- Squid反向代理加速缓存+负载均衡实验架构
- socket解读,http和socket之长连接和短连接区别!
- 一个简简单单检测http服务状态的脚本
- 【人脸识别】基于matlab GUI PCA人脸二维码识别(带面板)【含Matlab源码 754期】
- warning: Pulling without specifying how to reconcile divergent branches is discouraged. You can sque
- 什么是群体决策支持系统
- 【18】processing-声音(中文)
- 五子棋游戏设计(C语言AI智能板)
- html发送邮jmail,[分享]一个ASP写的JMAIL邮件发送测试程序,测试空间是否可以发送邮...
- 《人生哲理》一.我们必须活在当下!
- (bat)检查今天星期几,并执行程序
- 仿盛大服务器列表不显示,大刀护卫不见了,传奇GEE引擎服务端大刀没了
- Hadoop之——计算机网络端口的定义
- 做好架构师,要懂微服务,汇总微服务架构落地的15种框架
- 牛客网-编程语言初学练习赛(第一场)题解
- 电脑公司特别版8.5操作系统出来了;下载地址
热门文章
- MongoDB与Spring整合(支持事务)——SpringDataMongoDB
- python地图匹配_坐标点地图匹配方法
- 浏览器乱码的原因是什么?如何解决?
- linux 远程管理 远程登陆 复制文件 scp SSH
- 《游戏学习》| 微信蜘蛛侠动作游戏源码分析
- 报考报名显示服务器已满,广东教师资格证报名考区已满怎么办
- wordpress创建_如何在WordPress中创建问卷(简易方式)
- Fiddler抓取微信公众号数据
- 微信开放平台创建android应用时怎么获取应用签名
- java中文字符_Java 完美判断中文字符