2018年2月23日 星期五

[387] First Unique Character in a String

剛好昨天寫的一個在一開始的準備步驟有點像的
所以很快KO (?)
找出一個array裡面, 第一個"只出現一次的字母"的index
可以假定字母都是小寫.
原本用兩個for想暴力法比完, 結果完全想錯Orz
開始寫之前實在是要再細想一下,
不能老是用結果去回推啊啊啊啊~~~~(戳自己太陽穴)

First Unique Character in a String
int firstUniqChar(char* s) {
    int i,j;
    int len = strlen(s);
    if(len==1)
        return 0;
    int letters[26] = {0};
    for (i=0;i<len;i++)
        letters[s[i] - 'a']++;
    for(i=0;i<len;i++)
        if(letters[s[i] - 'a'] == 1)
            return i;
    return -1;
}

用直覺的寫完以後,
發現不用 - 'a' 也可以!!!
減a 會讓它變慢 !!!
天!!!
真是太偷吃步了
想不到這種加速法應該是因為我很正直吧(誤)
開個256的hash的話就可以少算很多次減a
但若是要求memory的時候, 只開26個就比256個少很多了吧哼 (其實根本沒差多少 XD)
總之更快的方法在下面:
int firstUniqChar(char* s) {
    int i,j;
    int len = strlen(s);
    if(len==1)
        return 0;
    int letters[256] = {0};
    for (i=0;i<len;i++)
        letters[s[i]]++;
    for(i=0;i<len;i++)
        if(letters[s[i]] == 1)
            return i;
    return -1;
}
是否要大家來找碴一下XD  感覺很好找雖然它們長的真的很像QQ
前往下一題gogo~~~

沒有留言:

張貼留言