题目
leetcode
英文
Given two strings s s s and t t t, return true if t t t is an anagram of s s s, and false otherwise.
中文
给定两个字符串 s s s 和 t t t ,编写一个函数来判断 t t t 是否是 s s s 的字母异位词。
示例
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
函数
bool isAnagram(char * s, char * t){
}
分析
初始想法:循环判断每一个字符是否在另一个字符串中,但是在以下示例没有通过
s = “aacc”, t = “ccac”
应该返回 false。但根据我的思路返回的是 true, 因为确实每一个字符在另一个里面都可以找到,但题目的意思应该是,一一对应。
字母异位词:由相同的字母按照不同的顺序组成的单词。
接下来就考虑:以其中一个字符串 s 作为标准,判断 s 的每一个字符是否可以在 t 中找到,同时,找到以后,就把 t 对应位置的字符置为 ‘0’;最后 利用字符串转整数的函数判断 t 是否所有字符都是 0
写到这的时候,突然发现,可以不需要字符串转整数这一步,因为前面已经判断过了,并且比较了长度。
NO.2 再接再厉
实现
my
bool isAnagram(char * s, char * t){
//strchr(s1, ch);
int n1 = strlen(s);
int n2 = strlen(t);
if (n1 != n2){
return false;
}
for (int i = 0; i < n1; i++){
char *p;
p = strchr(t, s[i]);
if ( p == NULL){
return false;
}else{
*p = '0';
}
}
//atoi(s) 字符串 转化成 整数
/*if (~atoi(t)){
return true;
}
return false;*/
return true;
}
知识点
头文件:#include<string.h>
strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
头文件:#include <stdlib.h>
atoi() 函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);
【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
【返回值】返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0。
温馨提示:ANSI C 规范定义了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6个可以将字符串转换为数字的函数,大家可以对比学习。另外在 C99 / C++11 规范中又新增了5个函数,分别是 atoll()、strtof()、strtold()、strtoll()、strtoull()