letecode [242] - Valid Anagram
Given two strings s and t , write a function to determine if t is an anagram of s.
Example 1:
Input: s = "anagram", t = "nagaram" Output: true
Example 2:
Input: s = "rat", t = "car" Output: false
题目大意:
给定两个字符串,判断t是否是s的字母异位词。
理 解:
题目说明可以假设字符串中的是小写字母,可以定义一个数组arr[26]记录每个字母出现的次数,初始化为0,遍历s[i]时每碰到一个元素即+1;
遍历t[i]时每碰到一个元素即-1,当某个值<0即返回false。遍历完后检查是不是数组所有元素均为0.
考虑字符串中的字符是任意的,这里用multiset处理,遍历s时存入集合中,遍历t时从集合中删除,若遍历t时未找到某个元素,即返回false。
代 码 C++:
class Solution { public: bool isAnagram(string s, string t) { if(s.length()!=t.length()) return false; multiset<char> m_set; multiset<char>::iterator it; int i=0; while(s[i]!='\0'){ m_set.insert(s[i]); ++i; } i = 0; while(t[i]!='\0'){ it = m_set.find(t[i]); if(it == m_set.end()){ return false; }else{ m_set.erase(it); } ++i; } return true; } };
运行结果:
执行用时 :100 ms, 在所有C++提交中击败了6.24%的用户
内存消耗 :17.5 MB, 在所有C++提交中击败了5.14%的用户