题目解析
给定m句话,找出每个单词第一个字母相同的一句话
如果有则输出,中间以|分隔
否则将句子原样输出
解题思路
模拟即可
将输入的一行字符串以空格分隔,然后获取字符串数组中每个字母的第一个字符。
然后将获取出来的字符串与当前字符串存入到map当中。
最后在map中找即可。
注:找到的字符串应该以字典序排列,所以还需要sort一下。
代码
import java.io.*;
import java.math.*;
import java.util.*;
public class Main
{
// 按照题目要求获取字符串数组中每个字符串的第一个字符
static String get(String S)
{
StringBuilder res = new StringBuilder(); // 需要上"sb",不然会超时
String s[] = S.split(" ");
for (String i : s)
{
if (i.length() > 0) res.append(i.charAt(0)); // 如果当前有字符,则获取其第一个字符
}
return res.toString();
}
public static void main(String[] args) throws IOException
{
int n = Integer.valueOf(sc.readLine());
HashMap<String, ArrayList<String>> tr = new HashMap<String, ArrayList<String>>();
for (int i = 1; i <= n; i++)
{
String a = sc.readLine();
String b = get(a);
tr.computeIfAbsent(b, res -> new ArrayList<String>()).add(a); // 获取map中的key为b的值,如果有则获key的值,否则新建一个ArrayList
}
int m = Integer.valueOf(sc.readLine());
while (m-- > 0)
{
String a = sc.readLine();
String b = get(a);
if (!tr.containsKey(b)) out.println(a); // 如果map中不存在key为b的,则输出a
else
{
ArrayList<String> ar = tr.get(b);
Collections.sort(ar); // 按照字典序排序
StringBuilder res = new StringBuilder();
for (String i : ar) // 将list中的内容按照题目要求拼接起来
res.append(i).append("|");
int len = res.length(); // 获取长度
res.delete(len - 1, len); // 删除最后一个"|"
out.println(res);
}
}
out.flush();
out.close();
}
static BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(System.out);
}
computeIfAbsent() 方法对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hashMap 中。
computeIfAbsent() 方法的语法为:
hashmap.computeIfAbsent(K key, Function remappingFunction)
注:hashmap 是 HashMap 类的一个对象。
参数说明:
key - 键
remappingFunction - 重新映射函数,用于重新计算值
返回值
如果 key 对应的 value 不存在,则使用获取 remappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。
例如
prices.computeIfAbsent("Shirt", key -> 280);