【问题标题】:Algorithm for assigning numerics to a string?将数字分配给字符串的算法?
【发布时间】:2018-01-23 22:46:33
【问题描述】:

我想设计一个字典来存储一个字符串的值,这样当比较两个字符串时,两个对应的值可以用来确定字典中哪个字符串排在第一位。

例如,“a”的值应小于“ab”的值。 “z”的值应大于“az”的值。等等。

我尝试用谷歌搜索,但找不到它:( 有没有很好的方法来实现这个?我发现它与十进制系统非常相似,但以 26 为基数。(例如 aaa 就像111,而 aaz 就像 11(26)。)但这不适用于 "z" > "az" 的情况,因为那会说 (26) > 1(26)。

我想出的一个解决方案是取最大单词的长度(假设是 m),然后通过对每个字母执行 26^m + 26^(m-1) 等等来分配一个值。然而,这需要知道最大单词的长度。有没有这样的算法不需要这个?

【问题讨论】:

  • 您可能想要比较的最大字符串有多大?另外,字符串是否包含除字母以外的任何内容? ñœ等外文字母呢?
  • 为什么需要数字表示?我知道的每一种编码语言都有内置的字符串比较函数。
  • 必须是整数吗?如果你使用浮点数,你可以做int(s[0]) + int(s[1])*26^-1 + ...

标签: algorithm


【解决方案1】:

这对于仅使用自然数/整数是不可能的,因为在任何两个字符串之间都有无限数量的其他字符串(例如"asdf" < "asdfa" < "asdfaa" < ... < "asdg"),但在任何两个整数之间只有有限数量的整数。

但是,正如 cmets 中所建议的,如果您可以使用实数,则可以将字符串映射到 char1 + char2/27 + char3/27^2+...。但是,对于长字符串,这将达到最大浮点精度并停止正常工作。

【讨论】:

  • 是的,评论+您的答案正是我想要的。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 2013-02-23
  • 1970-01-01
相关资源
最近更新 更多