Skip to content

字符串比较 ​

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')

Released under the MIT License.