1. 程式人生 > 實用技巧 >leetcode 387.字串中地第一個唯一字元

leetcode 387.字串中地第一個唯一字元

這題地最優時間複雜度是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.