题目来自剑指Offer
题目1:
思路:建哈希,检测字符串
代码:
void FindChar(const char* pStr) { assert(pStr); int Hash[256]; int nLen = strlen(pStr); memset(Hash,0,sizeof(int) * 256); for (int nCur = 0;nCur < nLen;nCur++) { Hash[pStr[nCur]]++; } for (int nCur = 0;nCur < nLen;nCur++)//不能直接遍历哈希 { if (Hash[pStr[nCur]] == 1) { cout<<pStr[nCur]<<endl; } } }
代码(2)
void FindChar(char* pStr) { assert(pStr != NULL); int nLen = strlen(pStr); int nArr[26] = {0}; int i = 0; for (i = 0;i < nLen;i++) { nArr[ pStr[i] - 'a']++; } for (int i = 0;i < 26;i++) { if (nArr[i] == 1) { cout<< static_cast<char>(i + 'a')<<endl; return; } } }
题目2:
代码:
bool IsAnagram(const char* pStrOne,const char* pStrTwo) { assert(pStrOne && pStrTwo); int Hash[256]; int nLenStrOne = strlen(pStrOne); int nLenStrTwo = strlen(pStrTwo); if (nLenStrOne != nLenStrTwo) { return false; } memset(Hash,0,sizeof(int) * 256); //遍历第一个串建立哈希 for (int nCur = 0;nCur < nLenStrOne;nCur++) { Hash[pStrOne[nCur]]++; } //遍历第二个串处理哈希 for (int nCur = 0;nCur < nLenStrTwo;nCur++) { if (Hash[pStrTwo[nCur]] < 1) { return false; } Hash[pStrTwo[nCur]]--; } //遍历哈希,检测是否相等 for (int nCur = 0;nCur < nLenStrTwo;nCur++) { if (Hash[pStrTwo[nCur]] != 0) { return false; } } return true; }