-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path3.kt
More file actions
51 lines (43 loc) · 1.23 KB
/
3.kt
File metadata and controls
51 lines (43 loc) · 1.23 KB
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
/* 3. Buddy Strings
https://leetcode.com/problems/buddy-strings/ */
fun main() {
print(buddyStrings("abc", "acd"))
print(buddyStrings("VALISH", "LAVISH"))
print(buddyStrings("ab", "ba"))
print(buddyStrings("ab", "ab"))
print(buddyStrings("aa", "aa"))
print(buddyStrings("aaaaaaabc", "aaaaaaacb"))
}
fun buddyStrings(s: String, goal: String): Boolean {
if(s.length != goal.length) return false
//Mismatch characters
var actual: Char? = null
var expected: Char? = null
//Iteration
for(i in s.indices){
if(s[i] != goal[i]){
when {
//First mismatch
actual == null -> {
actual = s[i]
expected = goal[i]
}
//Second mismatch
s[i] == expected && goal[i] == actual -> {
actual = '$'
}
//Other mismatch
else -> {
return false
}
}
}
}
//No mismatch found
if(actual == null){
val map = s.toCharArray().toList().groupingBy { it }.eachCount()
for(i in map.values)
if(i > 1) return true
}
return actual == '$'
}