例题4-1 UVa1339 Ancient Cipher
2015-11-06 22:43
423 查看
要点:
思路比较难想到,因为字母可以重排,则每个字母的位置不重要,重要的每个字母出现的次数,统计每个字母出现的次数,得到两个数组cnt1[26]和cnt2[26],将两个数组分别快排,若结果相同,则说明两个字符串中对应字符数目相同(对应什么字符不要紧,可以一一映射转换)
学习心得:
1.复习了一下快排,编译通过但懒得去过oj了
思路比较难想到,因为字母可以重排,则每个字母的位置不重要,重要的每个字母出现的次数,统计每个字母出现的次数,得到两个数组cnt1[26]和cnt2[26],将两个数组分别快排,若结果相同,则说明两个字符串中对应字符数目相同(对应什么字符不要紧,可以一一映射转换)
#include<stdio.h> #include<string.h> int cmp(const void*a, const void*b) { return *(int*)a - *(int*)b; } int main() { char s[9] = { 'A','B','C','D','E','F','G','H','I' };//简略表示 char c1[100], c2[100]; int cnt1[9] = {0}; int cnt2[9] = {0}; scanf("%s%s", c1,c2); int m = strlen(c1); for (int i = 0; i < m; i++) for (int j = 0;j < 9; j++) { if (c1[i] == s[j]) cnt1[j]++; if (c2[i] == s[j]) cnt2[j]++; } qsort(cnt1, 9, sizeof(cnt1[0]), cmp); qsort(cnt2, 9, sizeof(cnt2[0]), cmp); int n; for (n = 0; n < 9; n++) { if (cnt1 != cnt2 ) break; } if (n == 9) printf("YES\n"); else printf("NO\n"); return 0; }
学习心得:
1.复习了一下快排,编译通过但懒得去过oj了
相关文章推荐
- 2015-11-6
- Python之L.pop()和del L[i]
- LightOJ - 1082 Array Queries(RMQ)
- join解析和遍历
- cocos2d-x设计模式发掘之六:观察者模式
- mac3.0环境搭建
- 2、oracle专家编程---SQLPLUS设置
- 爬爬爬之路:OC语言(九) 内存管理(初级)
- Android 从java字节码告诉你 为什么Handler会造成内存泄露
- Android Studio导入第三方类库的方法
- Verilog之function使用说明
- 设计模式-简单工厂(1,简单继承,用来比较与工厂模式的区别)
- Spring测试框架JUnit4.4
- LightOJ - 1301 Monitoring Processes(树状数组)
- NOIP2015集训总结
- iOS开发中的IBAction中的IB是什么意思
- 《大道至简》第六章读后感
- Tyvj-超级书架
- 今天是我第一次写技术博客!
- ecshop 后台可修改用户积分