最具夫妻相
描述: 在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。
规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最具“夫妻相”的人选。
规则2:人名中的相同字母,按重复一次处理。例如:li ling 与li lei 重复的字符个数为2,而不是4。
预置女士名单(先后循序必须保证):
"wang fei",
"zhang man yu",
"zhang zhi yi",
"li li",
"li xiao man",
"li yu cun",
"yang ni",
"xiao tong",
"li lei",
"zhang san"
运行时间限制: 无限制
内存限制: 无限制
输入: 输入一个男士姓名,字符串
输出: 输出最具“夫妻相”的女士姓名
描述: 在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。
规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最具“夫妻相”的人选。
规则2:人名中的相同字母,按重复一次处理。例如:li ling 与li lei 重复的字符个数为2,而不是4。
预置女士名单(先后循序必须保证):
"wang fei",
"zhang man yu",
"zhang zhi yi",
"li li",
"li xiao man",
"li yu cun",
"yang ni",
"xiao tong",
"li lei",
"zhang san"
运行时间限制: 无限制
内存限制: 无限制
输入: 输入一个男士姓名,字符串
输出: 输出最具“夫妻相”的女士姓名
样例输入: li si
样例输出: li li
import java.util.Scanner;
public class xingming {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] names = {"wang fei",
"zhang man yu",
"zhang zhi yi",
"li li",
"li xiao man",
"li yu cun",
"yang ni",
"xiao tong",
"li lei",
"zhang san" };
boolean[][] c = new boolean[10][26];
for(int i=0;i<10;i++){
for(int j=0;j<26;j++){
c[i][j] = false;
}
}
for(int i=0;i<10;i++){
String name = names[i];
name = name.replaceAll(" ", "");
int len = name.length();
for(int j=0;j<len;j++){
c[i][(name.charAt(j)-'a')] = true;
}
}
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
String male = cin.nextLine();
int max = Integer.MIN_VALUE;
int index = -1;
male = male.replaceAll(" ", "");
boolean[] malec = new boolean[26];
for(int i=0;i<26;i++)
malec[i] = false;
int l = male.length();
for(int i=0;i<l;i++){
malec[male.charAt(i)-'a'] = true;
}
for(int i=0;i<10;i++){
int s = sim(malec,c[i]);
if(s>max){
max = s;
index = i;
}
}
System.out.println(names[index]);
}
}
private static int sim(boolean[] malec, boolean[] bs) {
// TODO Auto-generated method stub
int len = malec.length;
int r = 0;
for(int i=0;i<len;i++){
if(malec[i]&&bs[i])
r++;
}
return r;
}
}