字符串比较
2023-08-08 23:42:55
比较两个字符串的大小,两个字符串都是用 -
连接的数宇,比如 1-2-33-41-5
- 比较方式是从左到右,依次比较每个数字的大小,遇到相等的数字继续往后比较,遇到不同的数宇直接得到比较结果
- S1 > S2 return 1
- S1 < S2 return -1
- S1 === S2 return 0
js
function compare(s1, s2) {
const iterator1 = walk(s1)
const iterator2 = walk(s2)
while (true) {
const n1 = iterator1.next()
const n2 = iterator2.next()
if(n1.done && n2.done) {
return 0
} else if (n1.done) {
return -1
} else if (n2.done) {
return 1
} else if (n1.value < n2.value) {
return -1
} else if (n1.value > n2.value) {
return 1
}
}
}
function* walk(str) {
let part = ''
for (let i = 0; i < str.length; i++) {
// 没遇到 - 就一直取
if (str[i] !== '-') {
part += str[i]
} else {
// 遇到 - 说明取完了 转成number类型方便比较
yield +part
part = ''
}
}
// 循环完后到最后没有 - 如果part有值就返回
if (part) {
yield +part
}
}
compare('1-2-3-10-3', '1-2-3-666-10')
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
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