判定是否互为字符重排

概述:给定两个字符串 s1s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

输入: 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)—— 判定是否互为字符重排(简单)相关推荐

  1. LeetCode:面试题 01.02. 判定是否互为字符重排————简单

    题目 面试题 01.02. 判定是否互为字符重排 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = " ...

  2. LC: 面试题 01.02. 判定是否互为字符重排

    题目: 面试题 01.02. 判定是否互为字符重排. 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 链接:https://leetcode ...

  3. 判定是否互为字符重排

    判定是否互为字符重排 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 ...

  4. 365天挑战LeetCode1000题——Day 097 神策专场: 判定是否互为字符重排 按身高排序 按位与最大的最长子数组 找到所有好下标 好路径的数目

    面试题 01.02. 判定是否互为字符重排 代码实现(排序) class Solution {public:bool CheckPermutation(string s1, string s2) {s ...

  5. 程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)

    1. 题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = &qu ...

  6. 程序员面试金典01.02. 判定是否互为字符重排

    给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = "bca ...

  7. 文巾解题 面试题 01.02. 判定是否互为字符重排

    1 题目描述 2 解题思路 2.1 replace 对每一个在s1中的字符,如果s2中没有,那么说明两个不匹配,返回false:如果s2中有,那么将s2中的一个这个字符换成'' 如果s1全部遍历完了, ...

  8. 面试题01.02 判定是否互为字符重排

    给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 例1: 输入: s1 = "abc", s2 = "bca&q ...

  9. LeetCode之面试题01.02判定是否互为字符重排

    **题目:**给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例: 说明: class Solution {public boolean ...

最新文章

  1. 【译】Web Components简介
  2. 网站设计与开发流程图
  3. 《Photoshop Lab修色圣典(修订版)》—第1课1.6节小河川流而过
  4. 2009年4月计算机网络原理,全国2009年4月高等教育自学考试计算机网络原理
  5. Squid反向代理加速缓存+负载均衡实验架构
  6. socket解读,http和socket之长连接和短连接区别!
  7. 一个简简单单检测http服务状态的脚本
  8. 【人脸识别】基于matlab GUI PCA人脸二维码识别(带面板)【含Matlab源码 754期】
  9. warning: Pulling without specifying how to reconcile divergent branches is discouraged. You can sque
  10. 什么是群体决策支持系统
  11. 【18】processing-声音(中文)
  12. 五子棋游戏设计(C语言AI智能板)
  13. html发送邮jmail,[分享]一个ASP写的JMAIL邮件发送测试程序,测试空间是否可以发送邮...
  14. 《人生哲理》一.我们必须活在当下!
  15. (bat)检查今天星期几,并执行程序
  16. 仿盛大服务器列表不显示,大刀护卫不见了,传奇GEE引擎服务端大刀没了
  17. Hadoop之——计算机网络端口的定义
  18. 做好架构师,要懂微服务,汇总微服务架构落地的15种框架
  19. 牛客网-编程语言初学练习赛(第一场)题解
  20. 电脑公司特别版8.5操作系统出来了;下载地址

热门文章

  1. MongoDB与Spring整合(支持事务)——SpringDataMongoDB
  2. python地图匹配_坐标点地图匹配方法
  3. 浏览器乱码的原因是什么?如何解决?
  4. linux 远程管理 远程登陆 复制文件 scp SSH
  5. 《游戏学习》| 微信蜘蛛侠动作游戏源码分析
  6. 报考报名显示服务器已满,广东教师资格证报名考区已满怎么办
  7. wordpress创建_如何在WordPress中创建问卷(简易方式)
  8. Fiddler抓取微信公众号数据
  9. 微信开放平台创建android应用时怎么获取应用签名
  10. java中文字符_Java 完美判断中文字符