【问题标题】:Generate set of characters from list of strings efficiently [closed]有效地从字符串列表生成一组字符[关闭]
【发布时间】:2014-03-19 12:32:27
【问题描述】:

如何有效地从字符串列表中生成一组字符?

假设我有一个字符串列表,例如:

windows
linux-2.6

那么生成的字符串应该是:

-.26dilnosuwx

字符顺序应与字符类型(ascii/utf8)相对应。

编程语言无关紧要。不过,我更喜欢脚本解决方案(即 bash、python 等)。

【问题讨论】:

  • 选择一种语言,然后尝试自己编写一些代码,如果您对代码有特定的问题,只有这样Stack Overflow 上提问.
  • 创建一个集合,用字符填充它,然后对其进行排序。看起来很简单。
  • 为什么我不得不选择一种编程语言?我标记这种语言无关是有原因的。此外,有效地执行此操作的算法对我来说似乎并不简单,这就是我要问的原因。
  • @w177us 因为事实上,你只是要求输出。您可能对此进行了长时间的深思熟虑并尝试了多种方法,但您没有向我们提供任何迹象。我们不知道您的思路是什么,您当前的(如果有的话)方法等。 Stack Overflow 不仅仅是“我想这样做,告诉我如何”服务,它更像是“我已经尝试过这并且它不起作用/效率/无论如何,我该如何解决它?”如果您愿意,可以选择 pseudocode 作为您的语言。语言并不那么重要,逻辑才是。

标签: string algorithm language-agnostic


【解决方案1】:

(对我而言)最容易理解的方式是:

create an array of 256 Boolean values
for each character in the string
    convert the character to its numerical representation (i.e. 'A' is 65, etc.)
    set the corresponding value in the array to true
end for

// done scanning strings. Now output:
for i = 0 to 255
    if array[i] is set
        output character value i

如果您使用 Unicode 字符,则该数组必须是 65,536 个布尔值。

还有其他方法可以做到这一点。例如,您可以使用位数组而不是布尔值来节省空间。或者,您可以创建一个哈希表或使用某些语言进行设置,例如。但是上面的方法很有效,很容易理解,并且可以翻译成几乎任何编程语言。

【讨论】:

    【解决方案2】:

    我的 python 解决方案是随机样本

    >>> import random
    >>>
    >>> my_string = "linux-2.6"
    >>>
    >>> my_set = random.sample(my_string,len(my_string))
    >>>
    >>> for i in my_set: print i,
    2 i . u x l - 6 n
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 2019-07-18
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      相关资源
      最近更新 更多