持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
一、题目描述:
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = "abc", s2 = "bca" 输出: true 示例 2:
输入: s1 = "abc", s2 = "bad" 输出: false 说明:
0 <= len(s1) <= 100 0 <= len(s2) <= 100
来源:力扣(LeetCode)
链接:leetcode.cn/problems/ch…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
本题要求判断给定的两个字符串是否是重排的关系。首先,我们要正确理解重排的含义。
由于两个互为字符重排的字符串包含的字符完全相同,只有顺序可能不同,因此将两个互为字符重排的字符串排序之后,得到的有序字符串相同。只要将两个字符串排序之后比较是否相同,即可判断两个字符串是否互为字符重排
具体实现
长度不同,肯定返回false 在长度相同的情况,我们利用ASCII码的特性,对s1的每个字符计数 然后利用s2的字符数来减,如果出现小于0,说明s1和s2不能重排 如果能重排,s1和s2的字母必须相同且数量一样,顺序无所谓
也可以使用HashMap计数的方法来实现,如果一个字符串经过重新排列后,能够变成另外一个字符串,那么它们的每个不同字符的出现次数是相同的。
三、AC 代码:
class Solution {
public boolean CheckPermutation(String s1, String s2) {
int m = s1.length();
int n = s2.length();
if (m != n) {
return false;
}
int[] cnt = new int[256];
for (int i = 0; i < m; i++) {
cnt[s1.charAt(i)]++;
}
for (int i = 0; i < n; i++) {
char c = s2.charAt(i);
cnt[c]--;
if (cnt[c] < 0) {
return false;
}
}
return true;
}
}
四、总结:
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助,期待您找到心意的工作和满意的offer
期待下次再见~
\