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

news/2024/11/8 18:48:52/

判定是否互为字符重排

给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = “abc”, s2 = “bca”
输出: true
示例 2:

输入: s1 = “abc”, s2 = “bad”
输出: false

说明:

0 < = l e n ( s 1 ) < = 100 0 <= len(s1) <= 100 0<=len(s1)<=100
0 < = l e n ( s 2 ) < = 100 0 <= len(s2) <= 100 0<=len(s2)<=100

题解:

如果两个字符串长度不同,那么直接false
否则直接排序然后判断是否相等,非常暴力 (纯C玩家不要轻易尝试)
C++

class Solution {
public:bool CheckPermutation(string s1, string s2) {if(s1.size()!=s2.size())return false;sort(s1.begin(),s1.end());sort(s2.begin(),s2.end());return s1==s2;}
};

Python3:

class Solution:def CheckPermutation(self, s1: str, s2: str) -> bool:return sorted(s1) == sorted(s2)

题解2:

使用一个数组记录字母出现次数,再进行判断

class Solution {
public:bool CheckPermutation(string s1, string s2) {if(s1.size()!=s2.size())return false;int a[26]={0};for(int i=0;i<s1.size();i++)a[s1[i]-'a']++;for(int i=0;i<s2.size();i++)a[s2[i]-'a']--;for(int i=0;i<26;i++)if(a[i]!=0)return false;return true;}
};

当然, s 1. s i z e ( ) = = s 2. s i z e ( ) s1.size()==s2.size() s1.size()==s2.size()

class Solution {
public:bool CheckPermutation(string s1, string s2) {if(s1.size()!=s2.size())return false;int a[26]={0};for(int i=0;i<s1.size();i++)a[s1[i]-'a']++,a[s2[i]-'a']--;for(int i=0;i<26;i++)if(a[i]!=0)return false;return true;}
};

C

bool CheckPermutation(char* s1, char* s2){if(strlen(s1)!=strlen(s2))return false;int a[26]={0};for(int i=0;i<strlen(s1);i++)a[s1[i]-'a']++,a[s2[i]-'a']--;for(int i=0;i<26;i++)if(a[i]!=0)return false;return true;
}

题解3:

还记得上一道题的int 模拟 bool数组吗?
不过这一次需要再加一个,因为可能存在进位的情况,然后减去的是进位后的数字,那么就无法保证成对存在了,需要再来一个int确保

class Solution {
public:bool CheckPermutation(string s1, string s2) {if(s1.size()!=s2.size())return false;int mark=0;int mark2=0;for(int i=0;i<s1.size();i++)mark += 1<<(s1[i]-'a'),mark -= 1<<(s2[i]-'a'),\mark2 ^= 1<<(s1[i]-'a'),mark2 ^= 1<<(s2[i]-'a');return !mark&&!mark2;}
};

http://www.ppmy.cn/news/97805.html

相关文章

设计模式之状态模式

状态模式的定义是&#xff1a;当一个对象内在状态改变时允许其改变行为&#xff0c;这个对象看起来像是改变了自身所属的类。 该模式适合于对象具有有限的状态&#xff0c;并且在状态之间相互切换。 例如使用如下的条件分支语句也是属于状态的切换&#xff1a; switch (actio…

C/C++开发,libiec61850库学习及运用

目录 一、libiec61850库下载编译 1.1 下载 1.2 linux编译&#xff1a; 1.3 win编译 二、案例编译测试 2.1 CMakeLists.txt调整(server_example_goose) 2.2 模型static_model.h/static_model.cpp生成 2.3 案例编译(server_goose) 2.4 客户端编译 2.5 运行测试 一、libiec61850…

logstash 采集应用日志切割问题

1.logstash [oswatch@rce1 conf]$ cat test.conf input { file { path=>["/tmp/test/test.log*"] } } output { stdout { codec=>rubydebug{} } } 2.python脚本: [oswatch@rce1 conf]$ cat t1.py #!/usr/bin/python # -*- coding: UTF-…

算法|9.从暴力递归到动态规划2

9.算法|从暴力递归到动态规划2 1.数字字符串转英文字符串 题意&#xff1a;规定1和A对应、2和B对应、3和C对应…26和Z对应&#xff0c;那么一个数字字符串比如"111”就可以转化为:“AAA”、“KA"和"AK” 给定一个只有数字字符组成的字符串str&#xff0c;返回…

采购申请审批测试

采购申请审批的配置并不难&#xff0c;但是总会有原因导致业务无审批策略&#xff0c;而且这个配置也比较脆弱&#xff0c;有时同步也会出现问题&#xff0c;小编利用这篇操作记录下测试结果。 1、项目类别的审批策略分类 下图是审批策略分类-项目类别不给值&#xff0c;测试…

使用sklearn进行机器学习案例(1)

文章目录 案例一. 加州房价预测案例二. MNIST手写数字识别案例三. 波士顿房价预测 案例一. 加州房价预测 线性回归通过对训练集进行训练&#xff0c;拟合出一个线性方程&#xff0c;使得预测值与实际值之间的平均误差最小化。这个过程可以使用梯度下降法等优化算法来实现。即通…

【MCS-51】中断系统原理及应用

中断是单片机中一个十分重要的功能&#xff0c;它的出现能够让我们的单片机在顺序执行命令时&#xff0c;具备应对特殊情况的能力。 目录 &#x1f319;通信方式 &#x1f343;无条件传送 &#x1f343;有条件传送 &#x1f343;DMA通信 &#x1f343;中断传送 &#x1…

CGAL4.4+VC2008编译

CGAL4.4VC2008编译 CGAL 一: CGAL是欧盟资助的基础几何库,很底层, 纯算法, 对于你的项目和科研都是不可多得的好东西, 废话一句, 国内做这样的东西, 估计会活不下去交不了差的. 不多介绍.送上 英文原址, 从软件角度, CGAL架构与STL模板库, 需要你有较好的C功底. 英文功底就不…