-
题目地址:http://ac.jobdu.com/problem.php?pid=1283
-
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。
题目描述:
-
输入:
-
输入有多组数据
每一组输入一个字符串。
-
输出:
-
输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。
-
样例输入:
-
ABACCDEFF AA
-
样例输出:
-
1 -1
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-8006-1-1.html
-
再次看这个题目的时候,想到了数组处理。
数组的巧妙运用。
声明一个大小为26的数组array,初始值都赋值为0;
循环读取到的字符串,将字符-'A'作为array的下标。
循环字符串的长度,发现array[input[i]-'A'] == 1break就是结果。
C++ AC -
#include <stdio.h> #include <string.h> const int maxn = 10002; char input[maxn]; int array[26]; int i; int main(){ while(scanf("%s",input) != EOF){ memset(array,0,sizeof(array)); int len = strlen(input); for(i = 0; i < len ; i ++){ array[input[i]-'A']++; } int first = -1; for(i = 0; i < len ; i ++){ if(array[input[i]-'A'] == 1){ first = i; break; } } printf("%d\n",first); } return 0; } /************************************************************** Problem: 1283 User: wangzhenqing Language: C++ Result: Accepted Time:20 ms Memory:1032 kb ****************************************************************/
Java AC
-
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StreamTokenizer; public class Main { /* * 1283 */ public static void main(String[] args) throws Exception { StreamTokenizer st = new StreamTokenizer(new BufferedReader( new InputStreamReader(System.in))); while (st.nextToken() != StreamTokenizer.TT_EOF) { String input = st.sval; int len = input.length(); int array[] = new int[26]; for (int i = 0; i < len; i++) { array[input.charAt(i)-'A']++; } int first = -1; for (int i = 0; i < len; i++) { if (array[input.charAt(i)-'A'] == 1) { first = i; break; } } System.out.println(first); } } } /************************************************************** Problem: 1283 User: wangzhenqing Language: Java Result: Accepted Time:260 ms Memory:24624 kb ****************************************************************/