leetcode Valid Anagram 异位体

来源:互联网 发布:java多线程 time wait 编辑:程序博客网 时间:2024/05/23 11:38
Given two strings s and t, write a function to determine if t is an anagram of s.
For example,
s = "anagram", t = "nagaram", return true.

s = "rat", t = "car", return false.

一开始简单想法就是先将两个字符串排序,最后比较即可:结果时间复杂度大了:

void sel(char *a,int n){int i,j;int k;char max;for(i=0;i<n-1;i++) {max=a[0];k=0;   for(j=0;j<n-i;j++)   if(max<a[j]){max=a[j];k=j;}char temp=a[k];a[k]=a[n-i-1];a[n-i-1]=temp;}}bool isAnagram(char* s, char* t) {    int l1=strlen(s);int l2=strlen(t);if(l1!=l2)return false;sel(s,l1);sel(t,l2);for(int i=0;i<l1;i++)if(s[i]!=t[i])return false;return true;}

又想到这是字符匹配问题,故可以用一个Int[26]数组存储对应小写字母出现的个数。在确定两个字符串长度一致时,26个字母出现字数对应一样说明两者是一样的,只不过在各自字符串出现的顺序不一样:

bool isAnagram(char* s, char* t) {    int l1=strlen(s);int l2=strlen(t);int a[26]={0};int b[26]={0};if(l1!=l2)return false;for(int i=0;i<l1;i++)a[s[i]-'a']++;for(int i=0;i<l2;i++)b[t[i]-'a']++;for(int i=0;i<26;i++)if(a[i]!=b[i])return false;return true;}


0 0