题目来自剑指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;
}