Problem Description
小铁在回家的路上捡到了一个由26个大写字母组成的字符串,刚好最近他在学英文字母。但他发现这些字母顺序很凌乱,所以他想做一个 ABCDEFGHIJKLMNOPQRSTUVWXYZ的串。刚好最近小铁学会了一种魔法,可以把一个字母变成任意一个字母,但需要消耗小铁一点体力,为 了节省体力,小铁想要用最少的体力把捡到的串中的一部分变成他心仪的串,但是他的英语并不是太好,现在来求助你辣!
Input
输入有多组数据。 每组数据一行,一个长度为n的仅由大写字母构成的字符串。(0 < n <= 100000)。
Output
对应每一组输入,输出一个整数表示小铁得到心仪的字符串所需要消耗的最少体力。 如果得不到,输出-1。
Example Input
ABCDEFGHIJKLMNOPQRSTUVWXYZ ZYXWVUTSRQPONMLKJIHGFEDCBA ZYXWVUTSRQPONNOPQRSTUVWXYZZ A
Example Output
0 26 13 -1
代码如下
#include<stdio.h> #include<string.h> int main() { char s[100010]; int i, j, len, a[100010]; while(scanf("%s", s) != EOF) { len = strlen(s); if(len < 26) printf("-1\n"); else { for(i = 0; i <= len; i++) { a[i] = 0; } for(i = 0; i <= len - 26; i++) { char c = 'A'; for(j = i; j <= i + 25; j++) { if(s[j] == c) { a[i]++; } c++; } }//把子串分为26个26个看 int max = -1; for(i = 0; i <= len - 26; i++) { if(a[i] > max) { max = a[i]; } } printf("%d\n", 26 - max); } } return 0; }