原题传送:http://poj.org/problem?id=2159
排序。题目说了两个加密方法,判断是否可以完成从加密串到原串的转换。这道题的本质是字符出现的频率按升序(或降序)排列后是否一样,而不关心该频率是从哪一个字母转换来的。
做这道题的过程中出现了这样的错误需要惊醒自己:
if(len = strlen(s1) != strlen(s2)
{
......
}
我以为会先把strlen(s1)的值赋给len再和strlen(s2)比较,但不是这样的,是先比较了strlen(s1)和strlen(s2),然后把得到的布尔值赋给len。
这道题不需要判断字符长度是否相等,题目已经说了前提是相等的了。
View Code
1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 5 int h1[30], h2[30]; 6 char s1[105], s2[105]; 7 8 bool cmp(int a, int b){return a > b;} 9 int main() 10 { 11 int i, len; 12 while(scanf("%s%s", s1, s2) != EOF) 13 { 14 memset(h1, 0, sizeof h1); 15 memset(h2, 0, sizeof h2); 16 len = strlen(s1); 17 for(i = 0; i < len; i ++) 18 h1[s1[i] - 'A'] ++, h2[s2[i] - 'A'] ++; 19 std::sort(h1, h1 + 26, cmp); 20 std::sort(h2, h2 + 26, cmp); 21 for(i = 0; i < 26 && h1[i] == h2[i]; i ++); 22 if(i == 26) 23 puts("YES"); 24 else 25 puts("NO"); 26 } 27 return 0; 28 }
mark:POJ 100题留念!!!