3 回答
TA贡献1796条经验 获得超7个赞
这可能是一个矫kill过正,但是我将两个字符串分割,将它们收集为一个LinkedHashMap(以保留原始顺序),并计算每个字符串出现多少次,然后过滤掉非唯一条目:
String p1 = "I am Lalit";
String p2 = "Lalit Kumar";
String result =
Stream.concat(Arrays.stream(p1.split("\\s")), Arrays.stream(p2.split("\\s")))
.collect(Collectors.groupingBy(Function.identity(),
LinkedHashMap::new,
Collectors.counting()))
.entrySet()
.stream()
.filter(e -> e.getValue() == 1)
.map(Map.Entry::getKey)
.collect(Collectors.joining(" "));
TA贡献1856条经验 获得超11个赞
试试下面的代码:
public static void main(String[] args) {
String str1 = "I am Lalit";
String str2 = "Lalit Kumar";
List<String> set1 = new ArrayList<>(Arrays.asList(str1.split(" ")));
for (String s : Arrays.asList(str2.split(" "))) {
if (set1.contains(s)) set1.remove(s);
else set1.add(s);
}
System.out.println(String.join(" ", set1));
}
TA贡献1942条经验 获得超3个赞
你可以做这样的事情...
public static void printUncommon(String s1, String s2) {
String[] a = s1.split(" ");
String[] b = s2.split(" ");
Arrays.sort(a);
Arrays.sort(b);
int n1 = a.length;
int n2 = b.length;
int i = 0;
int j = 0;
while(i < n1 && j < n2) {
int compare = a[i].compareToIgnoreCase(b[j]);
if(compare == 0) {
i++;
j++;
}
else if(compare < 0) {
System.out.println(a[i]);
i++;
}
else if(compare > 0) {
System.out.println(b[j]);
j++;
}
}
if(i == n1) {
while(j < n2) {
System.out.println(b[j]);
j++;
}
}
else if(j == n2) {
while(i < n1) {
System.out.println(a[i]);
i++;
}
}
}
因此,考虑到数组a和的大小b,可以说这种算法的运行效率为O(n1 + n2),其中我们不包括排序时间和比较字符串所花费的时间。
我希望你能理解算法。如果没有,请告诉我,我会逐步指导您。干杯!
添加回答
举报