-
Notifications
You must be signed in to change notification settings - Fork 24
/
1417-reformat-the-string.js
83 lines (74 loc) · 2.16 KB
/
1417-reformat-the-string.js
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 1417. Reformat The String
// Easy 56%
// Given alphanumeric string s. (Alphanumeric string is a string consisting of
// lowercase English letters and digits).
// You have to find a permutation of the string where no letter is followed by
// another letter and no digit is followed by another digit. That is, no two
// adjacent characters have the same type.
// Return the reformatted string or return an empty string if it is impossible to
// reformat the string.
// Example 1:
// Input: s = "a0b1c2"
// Output: "0a1b2c"
// Explanation: No two adjacent characters have the same type in "0a1b2c".
// "a0b1c2", "0a1b2c", "0c2a1b" are also valid permutations.
// Example 2:
// Input: s = "leetcode"
// Output: ""
// Explanation: "leetcode" has only characters so we cannot separate them by
// digits.
// Example 3:
// Input: s = "1229857369"
// Output: ""
// Explanation: "1229857369" has only digits so we cannot separate them by
// characters.
// Example 4:
// Input: s = "covid2019"
// Output: "c2o0v1i9d"
// Example 5:
// Input: s = "ab123"
// Output: "1a2b3"
// Constraints:
// 1 <= s.length <= 500
// s consists of only lowercase English letters and/or digits.
/**
* @param {string} s
* @return {string}
*/
const reformat = function(s) {
const nums = [], digits = []
for (let c of s) {
if (Number.isInteger(c - 0)) nums.push(c)
else digits.push(c)
}
const n = nums.length, m = digits.length
if (Math.abs(n - m) > 1) return ''
let res = ''
if (n < m) {
for (let i = 0; i < n; i++) {
res += digits[i] + nums[i]
}
res += digits[m - 1]
} else {
for (let i = 0; i < m; i++) {
res += nums[i] + digits[i]
}
if (n !== m) res += nums[n - 1]
}
return res
}
;[
'a0b1c2', // '0a1b2c'
'leetcode', // ''
'1229857369', // ''
'covid2019', // 'c2o0v1i9d'
'ab123', // '1a2b3'
'da0b1c2e', // ''
].forEach((s) => {
console.log(reformat(s))
})
// Solution:
// 使用两个数组分别记录 s 字符串中的数字和字母
// 若两数组的长度之差大于 1,则不能组成新字符串
// 交替遍历两个数组组成新字符串,(长度大的先遍历,若相等则数字先)
// Submission Result: Accepted