天天看点

题目1149:子串计算

import java.io.IOException;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;

class Main
{
	public static final boolean DEBUG = false;
	
	public static void main(String[] args) throws IOException
	{
		Scanner cin;
		String s;
		
		if (DEBUG) {
			cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt"));
		} else {
			cin = new Scanner(new InputStreamReader(System.in));
		}
		
		while (cin.hasNext()) {
			s = cin.next();
			TreeMap<String, Integer> tm = new TreeMap<String, Integer>();
			int len = s.length();
			
			for (int i = 1; i < len; i++) {
				for (int j = 0; j <= len - i; j++) {
					String str = s.substring(j, j + i);
					if (tm.containsKey(str)) {
						int v = tm.get(str);
						tm.put(str, v + 1);
					} else {
						tm.put(str, 1);
					}
				}
			}
		
			Iterator<String> it = tm.keySet().iterator();
			while (it.hasNext()) {
				String str = it.next();
				if (tm.get(str).intValue() > 1) {
					System.out.println(str + " " + tm.get(str));
				}
			}
		
		}
	}
} 
           

TreeMap的另个一种遍历方式:

import java.io.IOException;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;

class Main
{
	public static final boolean DEBUG = false;
	
	public static void main(String[] args) throws IOException
	{
		Scanner cin;
		String s;
		
		if (DEBUG) {
			cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt"));
		} else {
			cin = new Scanner(new InputStreamReader(System.in));
		}
		
		while (cin.hasNext()) {
			s = cin.next();
			TreeMap<String, Integer> tm = new TreeMap<String, Integer>();
			int len = s.length();
			
			for (int i = 1; i < len; i++) {
				for (int j = 0; j <= len - i; j++) {
					String str = s.substring(j, j + i);
					if (tm.containsKey(str)) {
						int v = tm.get(str);
						tm.put(str, v + 1);
					} else {
						tm.put(str, 1);
					}
				}
			}
		
			Iterator<Map.Entry<String, Integer>> it = tm.entrySet().iterator();
			while (it.hasNext()) {
				Map.Entry<String, Integer> v = it.next();
				if (v.getValue() > 1) {
					System.out.println(v.getKey()+ " " + v.getValue());
				}
			}
		
		}
	}
} 
           
OJ