力扣算法-Day12
2023-12-27 13:48:12
242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例?1: 输入: s = "anagram", t = "nagaram" 输出: true
示例 2: 输入: s = "rat", t = "car" 输出: false
说明:?你可以假设字符串只包含小写字母。
思路:
? ? ? ? 排序:t 是 s的异位词等价于「两个字符串排序后相等」。因此我们可以对字符串 s?和 t分别排序,看排序后的字符串是否相等即可判断。此外,如果 s和 t?的长度不同,t 必然不是 s的异位词。
????????哈希表:数组就是一个简单的哈希表。而且这道题目中字符串只有小写字符,那么就可以定义一个大小为26的数组,来记录字符串s、t里字符出现的次数。s中字符出现一次,对应的索引++;t中字符出现一次,对应的索引--;
那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。
qsort
函数的原型定义在stdlib.h头文件中,如果要使用qsort
函数,需要在程序中首先包含这个头文件。在对数组排序时,只需调用qsort函数并传递需要排序的数组、元素个数、元素大小和比较函数即可。
qsort
函数的原型定义:void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *));
其中,参数的含义如下:
base
:指向待排序的数组首地址。nitems
:数组的元素个数。size
:每个元素的大小。compar
:用来比较两个元素的函数指针。
排序:
int cmp(const void* _a, const void* _b) {
char a = *(char*)_a, b = *(char*)_b;
return a - b;
}
bool isAnagram(char* s, char* t) {
int len_s = strlen(s), len_t = strlen(t);
if (len_s != len_t) {
return false;
}
qsort(s, len_s, sizeof(char), cmp);
qsort(t, len_t, sizeof(char), cmp);
return strcmp(s, t) == 0;
}
哈希表:
bool isAnagram(char* s, char* t) {
//判断长度是否相同
if (strlen(s) != strlen(t)) {
return false;
}
//定义一个哈希表,初始化为0
int same[26] = {0};
for ( int i=0; i<strlen(s); i++) {
same[s[i] - 'a']++;
same[t[i] - 'a']--;
}
//判断元素个数是否相同
for ( int i=0; i<26; i++) {
if (same[i] != 0) {
return false;
}
}
return true;
}
这一期专栏记录将我每天的刷题,希望各位的监督,也希望和各位共勉。
追光的人,终会光芒万丈!!
文章来源:https://blog.csdn.net/m0_73771309/article/details/135233192
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!