本文共 1078 字,大约阅读时间需要 3 分钟。
//先进行排序bool compare(string &s1, string &s2){ int i = 0; int j = 0; sort(s1.begin(), s1.end()); sort(s2.begin(), s2.end()); //下面是线性扫描时间复杂度为O(M+N),因为其已经排序好了 while (i < s1.length() && j < s2.length()) { while (s1[i] < s2[j] && i < s1.length() - 1) i++;//直到找出不小于s2的元素 if (s1[i] != s2[j]) return false; j++; } if (j == s2.length()) return true; else return false;}//哈希表的方法//考虑的是大写的元素//时间复杂度为O(n),空间复杂度O(n)bool compare1(string &s1, string &s2){ int hash[26] = { 0 }; int index = 0; int num = 0; //扫描短的字符串 for (int i = 0; i < s2.length(); i++) { int index = s2[i] - 'A';//变成int类型 if (hash[index] == 0) { hash[index] = 1; num++;//即看hash表中存放了多少个字母 } } for (int i = 0; i < s1.length(); i++) { index = s1[i] - 'A'; if (hash[index] == 1) { num--; if (num == 0)//表示所有的s2中字母在s1中都找到了 break; } } if (num == 0) return true; else return false;}
转载地址:http://vidoi.baihongyu.com/