-
-
Notifications
You must be signed in to change notification settings - Fork 118
/
Copy pathAsciiDistance.java
56 lines (41 loc) · 1.35 KB
/
AsciiDistance.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package leetcode;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author nikoo28 on 9/15/17
*/
class AsciiDistance {
private int distance(String str1, String str2) {
char[] histogram = new char[26];
Set<Character> str1Set = new HashSet<>();
Set<Character> str2Set = new HashSet<>();
for (int i = 0; i < str1.length(); i++) {
histogram[str1.charAt(i) - 'a']++;
str1Set.add(str1.charAt(i));
}
for (int i = 0; i < str2.length(); i++) {
histogram[str2.charAt(i) - 'a']++;
str2Set.add(str2.charAt(i));
}
Set<Character> unionSet = new HashSet<>();
unionSet.addAll(str1Set);
unionSet.addAll(str2Set);
List<Character> intersectionSet = new ArrayList<>(Math.max(str1Set.size(), str2Set.size()));
intersectionSet.addAll(str1Set);
intersectionSet.retainAll(str2Set);
List<Character> differenceSet = new ArrayList<>(str1Set.size());
differenceSet.addAll(unionSet);
differenceSet.removeAll(intersectionSet);
int sum = 0;
for (Character character : differenceSet) {
sum += character * histogram[character - 'a'];
}
return sum;
}
public static void main(String[] args) {
AsciiDistance asciiDistance = new AsciiDistance();
System.out.println(asciiDistance.distance("thought", "sloughs"));
}
}