leetcode - 有效的字母异位词 - 初级算法
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:
输入: s = “anagram”, t = “nagaram” 输出: true 示例 2:
输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
好吧 接着上一篇的来 还是处理字符串
有了上一篇对 大佬的代码的学习 解决这个还不是手到擒来
当然 一开始 我想是用两 hashTable 最后 比较一下 每一位是否相等
但是呢
比较两个数是否相等 就可以转换成 判断两个数做差是否为零
所以可以
将 string s 中的每个字符 在数组hashTable中对应的值 ++
string t 中的每个字符 在数组hashTable中对应的值 –
最后 判断hashTable 是否每一位为 0
吼 上代码
class Solution {
public:
bool isAnagram(string s, string t) {
int hashTable[26] = {};
if(s.size() != t.size())
return false;
for(int i = 0;i < s.size();i++){
hashTable[(int)s[i] - 'a'] ++;
hashTable[(int)t[i] - 'a'] --;
}
for(int i = 0;i < 26 ;i++){
if(hashTable[i] != 0)
return false;
}
return true;
}
};
好 看一下大佬的结果
class Solution {
public:
bool isAnagram(string s, string t) {
int m=s.size();
int n=t.size();
int sm[26]={0};
int tn[26]={0};
int flag = 1;
for(int i=0;i<m;i++)
{
sm[s[i]-97]=sm[s[i]-97]+1;
}
for(int j=0;j<n;j++)
{
tn[t[j]-97]=tn[t[j]-97]+1;
}
for (int l=0;l<26;l++)
{
if(sm[l]!=tn[l])
flag=0;
}
if(flag)
{return true;}
else
{return false;}
}
};
这是LeetCode上给出运行时间为 0 ms 的 。。
感觉不知道为什么会是 0 ms 。。
有毒 。。