LeetCode 387. First Unique Character in a String(文字列の最初の一意文字)--c言語


387. First Unique Character in a String


Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode"
return 0.

s = "loveleetcode",
return 2.

Note: You may assume the string contain only lowercase letters.

解題方法1:


まず特殊な状況を考える.2回のパス:1回目のポイントインデックス、2回目の判定
     16ms
int firstUniqChar(char* s) {
    int length = strlen(s);
    if(length == 1)
    {
        return 0;
    }
    
    for(int i=0;i= length)//  j   ,    
	            {
                        return i;//    
                    }
                    if(i == length-1) //  i        
                    {
                        if(j+2 >= length)// j          ,     
                        {
                            return i;
                        }
                    }
                }
            }
        }
    }
    return -1;//    ,  -1
}

改善:
フラグビットフラグの現在の文字が一意であるかどうかを定義します.
     16ms
int firstUniqChar(char* s) {
    int len=strlen(s);
    if(len==1)//        
        return 0;
    if(len==0)
        return -1;
    int flag=0;//  s[i]       ,0 1  
    for(int i=0;i

解題方法2:


追加の配列を定義することによってアルファベットの個数を記録し,配列によって解を得る.
     8ms
int firstUniqChar(char* s) {
    if(!s) {//        
        return -1;
    }
    int a[2][26];
    for(int i =0;i<26;i++) {
        a[0][i] = 0;//            
        a[1][i] = -1;//            
    }
    int len = strlen(s);
    int i = 0;
    for(;i

改善:
/*
     : 12 ms,  First Unique Character in a String C      98.86%    
     : 8.4 MB,  First Unique Character in a String C      78.39%    
*/
int firstUniqChar(char* s) {
    int length = strlen(s);

    int str[26]={0};
    /*
    int *str = (int *)malloc(26*sizeof(int));//  26        
    memset(str,0,26*4);//      0
             int str[26]={0};  。        ,           
    */

    int i = 0;
    //           
    for(i=0;i

後記:

  • は2つの改善アルゴリズムを推薦し、もう2つは自分が初めてやったので、対比して、思考の欠陥をまとめることができて、次回はもっと周到に
  • を考えます.
  • 注意memset()関数の使用