leetcode 387.字串中地第一個唯一字元
阿新 • • 發佈:2020-08-23
這題地最優時間複雜度是O(n).因為需要知道某個字元是不是唯一的,那麼必須要遍歷一遍陣列。在第一遍遍歷的過程中,想要同時儲存最小唯一字元偏移量是不可能的。
第一遍遍歷過程中,記錄這些唯一字元的偏移量,然後在這些偏移量最小的當中找到答案即可。
由於題目預設字串中的字元為小寫英文字母,故使用26大小的整形陣列記錄偏移量即可。
實現程式碼如下
class Solution { public: int firstUniqChar(string s) { int first[26]; int ans=INT_MAX; memset(first,-1,26*sizeof(int)); for(int i=0;i<s.size();++i){ if(first[s[i]-97]==-1) first[s[i]-97]=i; else first[s[i]-97]=-2; } for(int i=0;i<26;++i){ if(first[i]==-1||first[i]==-2)continue; ans=min(ans,first[i]); }if(ans==INT_MAX)return -1; return ans; } };
小tip:對於非字元型型別的陣列,memset只能用來初始化所有元素為-1或者0.