字符串比较
ts
/**
* 比较两个字符串的大小
* 两个字符串都是用-连接的数字,比如 1-2-33-41-5
* 比较方式是从左到右,依次比较每个数字的大小,遇到相等的数字继续往后比较,遇到不同的数字直接得到比较结果
* s1 > s2 return 1
* s1 < s2 return -1
* s1 === s2 return 0
*/
function compare(s1: string, s2: string) {}
惯性思维
将字符串按 “-” 进行 split,然后循环进行依次比较
截取有效率问题,万一字符串长度为 1 万呢?
代码略
迭代器
点击展开
ts
/**
* 生成器函数,生成一个迭代器
* @param str
*/
function* walk(str: string) {
let s = "";
for (let c of str) {
if (c === "-") {
yield Number(s);
s = "";
} else {
s += c;
}
}
if (s) {
yield Number(s);
}
}
function compare(s1: string, s2: string) {
const iter1 = walk(s1);
const iter2 = walk(s2);
while (true) {
const v1 = iter1.next();
const v2 = iter2.next();
// 两个都结束了,就相等
if (v1.done && v2.done) {
return 0;
}
// v1 先结束,s1 < s2
if (v1.done) {
return -1;
}
// v2 先结束,s1 > s2
if (v2.done) {
return 1;
}
if (v1.value > v2.value) {
return 1;
}
if (v1.value < v2.value) {
return -1;
}
}
}