1
+ /*
2
+ 3216. Lexicographically Smallest String After a Swap
3
+ https://leetcode.com/problems/lexicographically-smallest-string-after-a-swap/description/
4
+
5
+ Problem:
6
+ Given a string s containing only digits, return the lexicographically smallest string
7
+ that can be obtained after swapping adjacent digits in s with the same parity at most once.
8
+
9
+ Digits have the same parity if both are odd or both are even. For example, 5 and 9, as well as 2 and 4,
10
+ have the same parity, while 6 and 9 do not.
11
+
12
+ Example 1:
13
+
14
+ Input: s = "45320"
15
+
16
+ Output: "43520"
17
+
18
+ Explanation:
19
+
20
+ s[1] == '5' and s[2] == '3' both have the same parity, and swapping them results in the lexicographically smallest string.
21
+
22
+ Example 2:
23
+
24
+ Input: s = "001"
25
+
26
+ Output: "001"
27
+
28
+ Explanation:
29
+
30
+ There is no need to perform a swap because s is already the lexicographically smallest.
31
+
32
+
33
+ Constraints:
34
+
35
+ 2 <= s.length <= 100
36
+ s consists only of digits.
37
+ */
38
+
39
+ /*
40
+ Approach:
41
+
42
+ Checking if the present digit is greater than the next digit, if yes then checking the parity of the digit.
43
+ if both have the same parity swap the number. since this operation can be done at max once, break the loop after the first swap.
44
+ return the updated number
45
+
46
+ What is parity of a number?
47
+ Parity: the property of an integer of whether it is even or odd
48
+
49
+ how to check the parity of the number:
50
+ - using the & operation on the last bit,
51
+ - if (last bit)&1 == 1, means the last bit was 1. means Odd (ex: 3 has a bit representation of 11)
52
+ - if (last bit)&1 == 0, means last bit was 0. means Even number ( ex: 2 has a bit representation of 10)
53
+
54
+ */
55
+
56
+
57
+ /**
58
+ * @param {string } s
59
+ * @return {string }
60
+ */
61
+ var getSmallestString = function ( s ) {
62
+ let arr = s . split ( "" ) . map ( Number ) ;
63
+
64
+ const getParity = ( num ) => {
65
+ if ( num & 1 === 0 ) return "even" ;
66
+ else return "odd" ;
67
+ } ;
68
+
69
+ for ( let i = 0 ; i < s . length - 1 ; i ++ ) {
70
+ if ( arr [ i ] > arr [ i + 1 ] && getParity ( arr [ i ] ) === getParity ( arr [ i + 1 ] ) ) {
71
+ let tmp = arr [ i + 1 ] ;
72
+ arr [ i + 1 ] = arr [ i ] ;
73
+ arr [ i ] = tmp ;
74
+ break ;
75
+ }
76
+ }
77
+
78
+ return arr . join ( "" ) ;
79
+ } ;
80
+
81
+ module . exports . getSmallestString = getSmallestString ;
0 commit comments