LeetCode 387. First Unique Character in a String(文字列の最初の一意文字)--c言語
2657 ワード
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