返回:false
#include<iostream> using namespace std; #include<string> #include<algorithm> //意思理解错了,这道题的意思是所有的字符重排列,不是单词重排列,这个函数写的是单词的重排列 /* bool CheckSam(string stringA,string stringB) { if (stringA.length() != stringB.length()) return false; string str1[5000]; string str2[5000]; int i = 0; int j = 0; size_t idx1 = 0; size_t idx2 = stringA.find(' '); while (idx2 != string::npos) { str1[i++] = stringA.substr(idx1,idx2-idx1); idx1 = idx2+1; idx2 = stringA.find(' ',idx1); } str1[i++] = stringA.substr(idx1); idx1 = 0; idx2 = stringB.find(' '); while (idx2 != string::npos) { str2[j++] = stringB.substr(idx1,idx2-idx1); idx1 = idx2+1; idx2 = stringB.find(' ',idx1); } str2[j++] = stringB.substr(idx1); for (int len1 = 0; len1 < i; ++len1) { int len2 = 0; for( len2 = 0; len2 < j; ++len2) { if (str1[len1] ==str2[len2]) break; } if (len2 == j) return false; } return true; } */ //方式一,时间复杂度O(n) /* bool CheckSam(string stringA,string stringB) { if (stringA.length() != stringB.length()) return false; unsigned char array1[256] = { 0 } ; unsigned char array2[256] = { 0 } ; for (size_t i = 0; i < stringA.length(); ++i) { array1[ stringA[i] ]++; } for (size_t j = 0; j < stringB.length(); ++j) { array2[ stringB[j] ]++; } for (size_t idx = 0; idx < 256; ++idx) { if (array1[idx] != array2[idx]) return false; } return true; } */ //方式二,时间复杂度O(nlongn) bool CheckSam(string stringA,string stringB) { if (stringA.length() != stringB.length()) return false; sort(stringA.begin(),stringA.end()); sort(stringB.begin(),stringB.end()); for(size_t i = 0; i < stringA.length(); ++i) { if (stringA[i] != stringB[i]) return false; } return true; } int main() { string stringA = "This is nowcoder"; string stringB = "is This nowcoder"; cout << CheckSam(stringA,stringB) <<endl;; cout << "hello..." <<endl; return 0; }