您的位置:首页 > 其它

【华为OJ】【073-查找兄弟单词】

2016-05-17 07:51 459 查看

【华为OJ】【算法总篇章】

【华为OJ】【073-查找兄弟单词】

【工程下载】

题目描述







输入描述

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


输出描述

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


输入例子

3
abc
bca
cab
abc
1


输出例子

2
bca


算法实现

import java.util.*;

/**
* Author: 王俊超
* Date: 2016-01-05 14:49
* All Rights Reserved !!!
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
Map<Key, List<String>> map = new HashMap<>();

while (scanner.hasNext()) {
map.clear();
int n = scanner.nextInt();
// 构造一个字典
while ((--n) >= 0) {
String s = scanner.next();
Key k = new Key(s);
if (map.containsKey(k)) {
map.get(k).add(s);
} else {
List<String> list = new ArrayList<>();
list.add(s);
map.put(k, list);
}
}

//
String s = scanner.next();
// s的第i个兄弟节点
int i = scanner.nextInt();

Key k = new Key(s);

List<String> list = map.get(k);

if (list != null) {
Collections.sort(list);
// 删除s
while (list.contains(s)) {
list.remove(s);
}

System.out.println(list.size());

int cnt = 0;
Iterator<String> itr = list.iterator();
String t = "";
while (cnt < i && itr.hasNext()) {
t = itr.next();

if (!t.equals(s)) {
cnt++;
if (cnt == i) {
System.out.println(t);
}
}
}
}else {
System.out.println(0);
}
}

scanner.close();
}

private static class Key {
private String s;
private String t;
private int hashCode;

public Key(String s) {
this.s = s;

if (s == null) {
hashCode = 0;
} else {
char[] chars = s.toCharArray();
Arrays.sort(chars);
t = new String(chars);
hashCode = t.hashCode();
}
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Key key = (Key) o;

return t != null ? t.equals(key.t) : key.t == null;

}

@Override
public int hashCode() {
return hashCode;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: