java - 查找两个字符串的交集,其中返回两个字符串中出现的字符(与第一个字符串的序列顺序相同)
问题描述
我正在使用 HashMap() 来解决这个问题,但在输出中字符的顺序和出现方面遇到了问题。
我试图在迭代时和创建 StringBuilder 之后反转 String 构建器,但仍然面临另一个问题。
int l1 = inputStr1.length();
int l2 = inputStr2.length();
StringBuilder mkr = new StringBuilder();
HashMap<Character, Integer> res = new HashMap<>();
for (int i = 0; i < l1; i++) {
res.put(inputStr1.charAt(i),i);
}
for (int j = 0; j < l2; j++) {
if (res.containsKey(inputStr2.charAt(j))){
mkr.append(inputStr2.charAt(j));
}
}
mkr = mkr.reverse(); // Code only used in Test Scenario - 2
String result = mkr.toString();
if(result == null){return null;}
return result;
测试场景 1 - 输入字符串 1:Hello 输入字符串 2:world 预期输出为:lo 我的代码生成的实际输出:ol
测试场景 2 - [反转 StringBuilder 后] 输入字符串 1:嗨,你很好 输入字符串 2:嗨 man 预期输出是:hi a 我的代码生成的实际输出:a ih
解决方案
最后,在@askipop 的帮助下找到了解决方案:
if(inputStr1 == null || inputStr2 == null){
return null;
}
String res = "";
HashMap<Character, Integer> hm = new HashMap<>();
for(int i = 0; i < inputStr2.length(); i++){
Character c = inputStr2.charAt(i);
if(hm.containsKey(c)){
hm.put(c, hm.get(c) + 1);
} else{
hm.put(c, 1);
}
}
for(int i = 0; i < inputStr1.length(); i++){
Character ch = inputStr1.charAt(i);
if(hm.containsKey(ch)){
res += ch;
int c = hm.get(ch);
if (c - 1 > 0){
hm.put(ch, c - 1);
} else{
hm.remove(ch);
}
}
}
if(res.length() > 0){
return res;
}
return null;
}
推荐阅读
- redirect - 播放框架 - 使用查询字符串重定向
- javascript - 等待输入停止咖啡脚本
- javascript - 如何检查 jQuery 加载的 PHP 文件是否更改并在更改时执行函数?
- cgal - 使用 Lloyd 优化和 Mesh_domain::create_labeled_image_mesh_domain 的问题
- python - 如何使用 Python 和 Windows 设置下载 YouTube 视频音频的超时时间
- arrays - 按存储为字符串的日期对数组进行排序
- java - 数组列表中的 Java 对象
- objectbox - 如何使用中间表创建多对多关系
- python - 如何避免 anaconda 在 C 盘中安装文件/包?
- python - 如何在 Lambda 函数中使用存储桶标签对 s3 存储桶 ACL 进行操作