劍指offer 面試題50 第一個只出現一次的字符

題目描述
在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫).

用一個大小爲52的數組記錄每個字母出現的次數,然後在用一遍遍歷,找出第一個只出現一次的字符。複雜度O(n)

class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        // 大小寫共52個字母
        vector<int> map_table(52,0);
        for (int i=0;i<str.length();i++) {
            if((int)str[i]>='a') {
                map_table[(int)str[i]-'a'+26]++;
            } else {
                map_table[(int)str[i]-'A']++;
            }
        }
        for (int i = 0; i < str.length(); i++)
        {   
            int index=0;
            if((int)str[i]>='a') {
                index=(int)str[i]-'a'+26;
            } else {
                index=(int)str[i]-'A';
            }
            if(map_table[index]==1) {
                return i;
            }
        }
        return -1;
    }
};
發佈了94 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章