可以考虑到用空间来换取时间,遍历一遍字符串时,可以记录下字符次数。第二次遍历,比较哈希表里面的出现的次数。
bool FindFirstTwice(char* str)
{
int len = strlen(str);
int hashtables[256] = { 0 };
//第一次遍历
for (int i = 0; i < len; ++i)
{
hashtables[str[i]]++;
}
//第二次遍历
for (int i = 0; i < len; ++i)
{
if (hashtables[str[i]] == 2)
{
cout << str[i] << endl;
return true;
}
}
return false;
}
void test3()
{
char str[] = "abcdefabcdefabc";
bool flag = FindFirstTwice(str);
}
int main()
{
test3();
return;
}
替换字符串中的空格为$$$。要求时间复杂度为O(N)
void Repacle(char* dest, const char* src)
{
assert(dest && src);
while (*src)
{
if (*src != ' ')
{
*dest = *src;
++dest;
}
else
{
strcpy(dest, "$$$");
dest = dest + 3;
}
++src;
}
*dest = '\0';
}
void test1()
{
char arr[100] = { 0 };
char str[] = "talk is cheap show me the code";
Repacle(arr, str);
printf("%s\n", arr);
for (int i = 0; i < sizeof(arr); ++i)
{
cout << arr[i] << "";
}
cout << endl;
}
int main()
{
test1();
}