9度OJ 1283:最初に1回しか現れない文字(カウント)
時間制限:1秒
メモリ制限:32メガ
特殊問題:いいえ
コミット:1808
解決:997
タイトルの説明:
1つの文字列(1<=文字列長<=10000、すべて大文字で構成されている)に、1回目に表示される文字が見つかります.
入力:
複数グループのデータを入力各グループに文字列を入力します.
出力:
最初に1回しか現れない文字の下付き文字を出力し、1回しか現れない文字がなければ-1を出力します.
サンプル入力:
サンプル出力:
考え方:
すべての大文字をカウントすればいいです.
1回だけループする解法は考えられませんでしたが、私のやり方は2回ループして、1回目のカウント、2回目の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
****************************************************************/