给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
知识补充:哈希(hash,中文:散列;音译:哈希),是一种算法思想,又称散列算法、哈希函数、散列函数等。哈希函数能指导任何一种数据,构造出一种储存结构,这种储存结构能够通过某种函数使得元素的储存位置和数据本身的值(一般称之为key值)能够建立一种映射关系,这样在查找数据时就可以通过同一个哈希函数通过key值迅速找到元素的位置。这种查找思想类似于数组的随机访问,它的时间复杂度为O ( 1 ) O(1)O(1)。不同于以往,即便是红黑树,它的查找时间复杂度也是O ( l o g 2 N ) ) O(log_2N))O(log 2N))。原因是不论是顺序结构还是平衡树中,元素的key值和储存之间没有映射关系,因此在查找元素时必须以key值进行若干次比较,而这恰恰增加了时间复杂度。map和set底层都是用二叉搜索树实现的,因而他们都是有序的。而unordered_set和unorder_map中的元素都是无序的,原因是它们底层都使用了哈希思想实现。前者能使用双向迭代器,后者是单向迭代器。
解析:本题将s中的字符放入哈希表中,并且求出每个字符的个数,其次,在哈希表中寻找t中的元素,如果找到就把元素个数-1(if(_map.find(t[i]) != _map.end() && _map[t[i]]>0)
{
_map[t[i]]--;
}
)
注意:还应考虑起始s和t的个数,如果不相等,直接返回false。
代码: