leetcode Valid Anagram 异位体
2015-08-05 17:23
162 查看
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.
一开始简单想法就是先将两个字符串排序,最后比较即可:结果时间复杂度大了:
又想到这是字符匹配问题,故可以用一个Int[26]数组存储对应小写字母出现的个数。在确定两个字符串长度一致时,26个字母出现字数对应一样说明两者是一样的,只不过在各自字符串出现的顺序不一样:
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; }
相关文章推荐
- DB导入、导出数据
- hdu 5348 MZL's endless loop 欧拉回路
- 集训第四周(高效算法设计)K题 (滑窗问题)
- Emmet 生成 HTML 的语法
- 迷宫城堡
- HDU1181:变形课 【dfs】
- 图解sql join
- 大明A+B
- android 自定义组合控件总结(两个Button点击切换)
- 关于SQL Server的WITH(NOLOCK)和(NOLOCK)
- BZOJ2278 : [Poi2011]Garbage
- 计算文字的尺寸
- Mybatis: 常见问题
- 前端性能的的重要性
- 为什么WiFi自动信道选到的信道多数在1/6/11(转载)
- Android布局属性大全
- 2>&1
- Openjudge4977 怪盗基德的滑翔翼(dp)
- Java大数中的小数 HDU1753
- jquery获取复选框checkbox的值