有效的字母异位词
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母
分析
1、什么是字母异位词
如果两个字符串长度相等,各个字母的个数相等,只是顺序不同,那么这两个词是字母异位词
2、如果两个字母长度不同,直接返回false
if(s.length != t.length)
{
retutn false;
}
3、两个字母是异位词,表示排序后两个字符相等
代码
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);//利用strlen计算长度
if (len_s != len_t) {
return false;
}
qsort(s, len_s, sizeof(char), cmp);//s排序
qsort(t, len_t, sizeof(char), cmp);//t排序
return strcmp(s, t) == 0;
}
1、size_t strlen(const char *str)
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符
2、qsort()对数组进行排序,函数原型如下(quicksort)
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
- base:指向要排序的数组的第一个元素指针
- nitems:数组元素的个数
- size:数组中每个元素大小,以字节为单位
- compar:用来比较的函数
3、const void* _a
const是定义常量,不可修改。void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据
4、* (char*)_a
(char )_a表示指向 _a的指针,并且为char类型; * (char) _ a表示 _ a存放的内容
5、strncmp()把 str1 和 str2 进行比较,最多比较前 n 个字节
int strncmp(const char *str1, const char *str2, size_t n)
参数
- str1 – 要进行比较的第一个字符串。
- str2 – 要进行比较的第二个字符串。
- n – 要比较的最大字符数。
返回值
该函数返回值如下:
- 如果返回值 < 0,则表示 str1 小于 str2。
- 如果返回值 > 0,则表示 str2 小于 str1。
- 如果返回值 = 0,则表示 str1 等于 str2。