《剑指offer》第五十题(字符串中第一个只出现一次的字符)
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》第五十题(字符串中第一个只出现一次的字符)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 面試題50(一):字符串中第一個只出現一次的字符
// 題目:在字符串中找出第一個只出現一次的字符。如輸入"abaccdeff",則輸出
// 'b'。
#include <iostream>
#include <string>
//使用一個長度為常量的哈希表,兩次遍歷,時間復雜度O(n),空間復雜度O(1)
char FirstNotRepeatingChar(const char* pString)
{if (pString == nullptr)return '\0';const int tableSize = 256;unsigned int hashTable[tableSize];//建立一個簡單的哈希表,鍵值為ASCII碼的int值,值為其個數for (unsigned int i = 0; i < tableSize; ++i)hashTable[i] = 0;const char* pHashKey = pString;while (*(pHashKey) != '\0')//第一次遍歷,統計pString字符串中每個字符的個數hashTable[*(pHashKey++)] ++;pHashKey = pString;while (*pHashKey != '\0')//第二次遍歷,檢查哈希表中第一個值為1的鍵值
{if (hashTable[*pHashKey] == 1)return *pHashKey;pHashKey++;}return '\0';
}// ====================測試代碼====================
void Test(const char* pString, char expected)
{if (FirstNotRepeatingChar(pString) == expected)printf("Test passed.\n");elseprintf("Test failed.\n");
}int main()
{// 常規輸入測試,存在只出現一次的字符Test("google", 'l');// 常規輸入測試,不存在只出現一次的字符Test("aabccdbd", '\0');// 常規輸入測試,所有字符都只出現一次Test("abcdefg", 'a');// 魯棒性測試,輸入nullptrTest(nullptr, '\0');system("pause");return 0;
}
?
轉載于:https://www.cnblogs.com/CJT-blog/p/10526941.html
總結
以上是生活随笔為你收集整理的《剑指offer》第五十题(字符串中第一个只出现一次的字符)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序实现图片是上传、预览功能
- 下一篇: lambdafiltermapreduc