首页 > ACM题库 > 九度OJ > 九度-1199-找位置[解题代码]
2013
12-13

九度-1199-找位置[解题代码]

题目来源:2005年华中科技大学计算机保研机试真题

题目描述:

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12
输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

输入:

输入包括一个由字母和数字组成的字符串,其长度不超过100。

输出:

可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。

样例输入:
abcaaAB12ab12
样例输出:
a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
提示:

1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。


java 代码如下:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while(s.hasNext()){
			String str = s.next();
			char[] arr = str.toCharArray();
			int len1,len2 = str.length();
			ArrayList<Character> list = new ArrayList<Character>();
			String temp = str;
			while(temp.length()>0){ //循环
				char c = temp.charAt(0);
				len1 = len2;
				temp = temp.replaceAll(c+"", "");//每次从第一字符开始截
				len2 = temp.length();
				if(len1 - len2 >1){ //判断截掉的字符是否有重复
					list.add(c);
				}
			}
			for(char c:list){
				int flag = 0;//标志是否为第一次输出
				for(int i=0; i<arr.length; i++){
					if(arr[i] == c){
						if(flag == 0){
							flag = 1;
							System.out.print(c+":"+i); //第一次输入前面没 逗号
						}
						else
							System.out.print(","+c+":"+i); //后几次输入带 逗号
					}
				}
				System.out.println();
			}
		}
	}
}

/**************************************************************
	Problem: 1199
	User: coder
	Language: Java
	Result: Accepted
	Time:2300 ms
	Memory:70448 kb
****************************************************************/