java - n 个字符串的交集
问题描述
我正在开发一个程序来查找 n 个字符串的交集的字符。我编写了以下代码:
import java.util.ArrayList;
import java.util.Scanner;
public class TestJoin {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(); // no of strings
String s1 =sc.next().toLowerCase();
ArrayList<Character> set1 = new ArrayList<Character>();
while(n-->1)
{
String s2 =sc.next().toLowerCase();
ArrayList<Character> set2 = new ArrayList<Character>();
for(char c : s1.toCharArray()) {
set1.add(c);
}
for(char c : s2.toCharArray()) {
set2.add(c);
}
set1.retainAll(set2);
for(char c : set1)
{
s1=Character.toString(c);
}
}
for(char c :set1)
System.out.println(c);
}
}
当我尝试打印字符时,它会给出错误的输出。
输入-
3
aabcde
abazx
yuabna
预期输出:aab
实际输出:aabb
解决方案
使用单独的方法通常会使问题变得更小,更容易解决。
我建议您首先创建一个方法来计算 2 的交集String
,然后您可以在while
循环中使用它来计算传入字符串与当前交集的交集。
我试图保持你的逻辑,我写了自己的保留循环,因为我不确定它的List.retainAll
作用
此方法计算 2 的交集String
:
private static String intersectionOf(String s1, String s2) {
List<Character> list1 = new ArrayList<>();
for(char c : s1.toCharArray()) {
list1.add(c);
}
List<Character> list2 = new ArrayList<>();
for(char c : s2.toCharArray()) {
list2.add(c);
}
StringBuilder intersection = new StringBuilder();
for(Character c : list1) {
if(list2.contains(c)) {
intersection.append(c);
list2.remove(c); // remove it so it is not counted twice
}
}
return intersection.toString();
}
您现在可以在循环中使用它,逻辑看起来更简单
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt(); // no of strings
String result = sc.next().toLowerCase();
String s;
while(n-- > 1) {
s = sc.next().toLowerCase();
result = intersectionOf(result, s);
}
for(char c : result.toCharArray())
System.out.println(c);
}
推荐阅读
- xcode - 为什么不生成本地通知?
- r - 分箱数据的频率图
- php - 使用表单将文件上传到 S3,而表单中没有操作文件
- android - RazorPay Android:使用 callback_url 时卡在 RazorPay 视图中
- css - 如何为 Blazorise 卡片图像添加圆角?
- shortcut - () 的崇高快捷方式
- reactjs - 如何在 React 中显示我的数组的单击元素?
- nuxt.js - 在 nuxt.js 中重写 url
- google-apps-script - 从谷歌表格复制列的所有值并将它们添加为电子表格中的编辑器时显示错误
- django - 将私有子网中的 Django-NGINX 内容提供给 AWS 应用程序负载均衡器