9度OJ 1283:最初に1回しか現れない文字(カウント)


時間制限:1秒
メモリ制限:32メガ
特殊問題:いいえ
コミット:1808
解決:997
タイトルの説明:
1つの文字列(1<=文字列長<=10000、すべて大文字で構成されている)に、1回目に表示される文字が見つかります.
入力:
複数グループのデータを入力各グループに文字列を入力します.
出力:
最初に1回しか現れない文字の下付き文字を出力し、1回しか現れない文字がなければ-1を出力します.
サンプル入力:
ABACCDEFF
AA

サンプル出力:
1
-1

考え方:
すべての大文字をカウントすればいいです.
1回だけループする解法は考えられませんでしたが、私のやり方は2回ループして、1回目のカウント、2回目の1回目の文字を探しています.
コード:
#include <stdio.h>
#include <string.h>
 
#define M 10000
#define N 26
 
int main()
{
    int i, min;
    char s[M+1];
    int c[N], index[N];
 
    while(scanf("%s", s) != EOF)
    {
        for (i=0; i<N; i++)
            c[i] = 0;
 
        for (i=0; i<strlen(s); i++)
        {
            if ( c[s[i]-'A']++ == 0)
                index[s[i]-'A'] = i;
        }
 
        min = M;
        for (i=0; i<N; i++)
        {
            if (c[i] == 1 && index[i] < min)
                min = index[i];
        }
 
        if (min == M)
            printf("%d
", -1); else printf("%d
", min); } return 0; } /************************************************************** Problem: 1283 User: liangrx06 Language: C Result: Accepted Time:10 ms Memory:912 kb ****************************************************************/