zoukankan      html  css  js  c++  java
  • 查找兄弟单词

    描述

    题目描述

    知识点 查找
    运行时间限制 10M
    内存限制 128
    输入

    先输入字典中单词的个数,再输入n个单词作为字典单词。
    输入一个单词,查找其在字典中兄弟单词的个数
    再输入数字n

    输出

    根据输入,输出查找到的兄弟单词的个数

    输出指定的第n个兄弟单词

    样例输入 3 abc bca cab abc 1
    样例输出 2 bca
    package com.oj5;
    
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    import java.util.TreeMap;
    import java.util.TreeSet;
    
    public class Oj {
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int num = in.nextInt();
    		in.nextLine();
    		String[] data = new String[num];
    		for(int i = 0;i < num; i++)
    			data[i] = in.nextLine();
    		String input = in.nextLine();
    		int inputNum = in.nextInt();
    		
    		int count = 0;
    		Set<String> set = new TreeSet<String>();
    		for(int i = 0;i < num; i++)
    			if(isBrother(data[i],input)){
    				count++;
    				set.add(data[i]);
    			}
    		
    		System.out.println(count);
    		
    		Iterator<String> iter = set.iterator();
    		int k = 0;
    		while(iter.hasNext()){
    			k++;
    			String value = iter.next();
    			if(k==inputNum)
    				System.out.println(value);
    		}
    		
    	}
    
    	private static boolean isBrother(String src, String input) {
    		//System.out.println("src: "+src+" "+input);
    		if(src.equals(input))
    			return false;
    		else if(src.length()!=input.length()){
    			return false;
    		}else{
    			Map<Character,Integer> mapSrc = new TreeMap<Character,Integer>();
    			Map<Character,Integer> mapInput = new TreeMap<Character,Integer>();
    			for(int i = 0;i < src.length(); i++)
    				if(mapSrc.containsKey(src.charAt(i))){
    					mapSrc.put(src.charAt(i),1+mapSrc.get(src.charAt(i)));
    				}else{
    					mapSrc.put(src.charAt(i), 1);
    				}
    			
    			for(int i = 0;i < input.length(); i++)
    				if(mapInput.containsKey(input.charAt(i))){
    					mapInput.put(input.charAt(i), 1+mapInput.get(input.charAt(i)));
    				}else{
    					mapInput.put(input.charAt(i), 1);
    				}
    			
    			//System.out.println("hi1: "+src);
    			for(Map.Entry<Character, Integer> srcEntry:mapSrc.entrySet()){
    				Character key = srcEntry.getKey();
    				int value2;
    				try{
    					 value2 = mapInput.get(key);
    				}catch(Exception e){
    					return false;
    				}
    				if(value2!=srcEntry.getValue())
    					return false;
    			}
    			//System.out.println("hi2: "+src);
    			for(Map.Entry<Character, Integer> inputEntry:mapInput.entrySet()){
    				Character key2 = inputEntry.getKey();
    				int value;
    				try{
    					value = mapSrc.get(key2);
    				}catch(Exception e){
    					return false;
    				}
    				//System.out.println(key2+" "+value);
    				if(value!=inputEntry.getValue())
    					return false;
    			}
    			//System.out.println("hi3: "+src);
    			return true;
    		}
    	}
    }
    

      

  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/5411597.html
Copyright © 2011-2022 走看看