正在挑戰一個CrackMe的你,把需要填寫的前面幾位密碼都正確猜出了,可是這最後一位密碼,好像藏得有點深。
CrackMe的作者還挑釁般的在裏面藏了個.tar.gz文件,解壓縮出來,裏面寫道你要的最後一個字符就在下面這個字符串裏。
這個字符是下面整個字符串中第一個只出現一次的字符。 (比如,串是abaccdeff,那麼正確字符就是b)
然而下面給出來的字符串好像太長太長了,單靠人力完全無法找出來。於是,你需要寫一個程序代勞了。
輸入文件體積較大,請使用一些快速的輸入輸出手段,不推薦使用cin/cout,對Java並不推薦使用Scanner直接讀寫。
輸入描述:
第一行,一個正整數T(T≤20),表示輸入數據組數。之後T行,每行一個字符串S。
(1≤S的長度≤10^6,保證字符串中出現的字符的ASCII碼在[0x21,0x7F)範圍內,即均爲可顯示的非空白符,同時保證一定有解)
輸出描述:
一共T行,每行一個字符C ,表示所給的相應字符串中第一個只出現一次的字符。
輸入例子:
2
abaccdeff
testonline
輸出例子:
b
s
#include <stdio.h>
#include <limits.h>
#include <string.h>
int main()
{
int c[94], b[94], i, T, mn;
char ch;
scanf("%d", &T);
getchar();
while(T--)
{
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
i = 0;
while(scanf("%c", &ch) && ch != '\n')
{
c[ch - 33]++;
b[ch - 33] = i++;
}
mn = INT_MAX;
for(i = 0; i < 94; i++)
{
if(c[i] == 1)
{
if(mn > b[i])
{
mn = b[i];
ch = i + 33;
}
}
}
printf("%c\n", ch);
}
return 0;
}