String 确定字符串是否包含字符的最快方法

String 确定字符串是否包含字符的最快方法,string,algorithm,search,unicode,String,Algorithm,Search,Unicode,我有一个由unicode字符组成的字符串。同一字符只能出现一次。 字符串的长度介于1到50之间 检查字符串中是否有特定字符的最快方法是什么 迭代字符串不是一个好的选择,不是吗?是否有任何有效的算法用于此目的 我的第一个想法是保持字符串中的字符按字母顺序排序。它可以快速搜索,但unicode字符的排序和比较并不是那么简单(使用正确的排序规则),而且它有很大的成本,可能比迭代整个字符串更大 也许是一些杂凑?也许迭代是最快的方法 有什么想法吗?如果没有预处理,最简单、最快的方法就是遍历字符 如果有预处

我有一个由unicode字符组成的字符串。同一字符只能出现一次。 字符串的长度介于1到50之间

检查字符串中是否有特定字符的最快方法是什么

迭代字符串不是一个好的选择,不是吗?是否有任何有效的算法用于此目的

我的第一个想法是保持字符串中的字符按字母顺序排序。它可以快速搜索,但unicode字符的排序和比较并不是那么简单(使用正确的排序规则),而且它有很大的成本,可能比迭代整个字符串更大

也许是一些杂凑?也许迭代是最快的方法


有什么想法吗?

如果没有预处理,最简单、最快的方法就是遍历字符

如果有预处理,前面的方法可能仍然是最好的,或者您可以尝试使用一个小哈希表来存储字符串是否包含该字符。存储散列将占用额外的空间,但对于内存缓存来说可能更好(具有较低的散列冲突&假设您不必访问实际的字符串)。确保你测量了性能


我有种感觉,你在试图过度设计一项非常简单的任务。您是否已验证这是应用程序中的瓶颈?

如果没有预处理,最简单、最快的方法就是迭代字符

如果有预处理,前面的方法可能仍然是最好的,或者您可以尝试使用一个小哈希表来存储字符串是否包含该字符。存储散列将占用额外的空间,但对于内存缓存来说可能更好(具有较低的散列冲突&假设您不必访问实际的字符串)。确保你测量了性能


我有种感觉,你在试图过度设计一项非常简单的任务。您是否已验证这是应用程序中的瓶颈?

通过字符串的线性搜索是O(n),每个操作都非常简单。字符串排序为O(n logn),操作更复杂。很明显,线性搜索在所有情况下都会更快


如果字符存储为UTF-8或UTF-16编码,则可能需要搜索多个连续元素。有一些方法可以加快速度,例如或。不清楚这样短的搜索字符串是否会有实际的加速。

通过字符串的线性搜索是O(n),每个操作都非常简单。字符串排序为O(n logn),操作更复杂。很明显,线性搜索在所有情况下都会更快


如果字符存储为UTF-8或UTF-16编码,则可能需要搜索多个连续元素。有一些方法可以加快速度,例如或。不清楚这样短的搜索字符串是否会有实际的加速。

这是对同一字符串的重复操作还是一次任务?如果这是一个一次性任务,那么在查看所有字符之后,再也没有比检查字符串更好的了。O(n)


如果是重复操作,则可以对字符串进行一些预处理,以加快后续操作。最节省空间和最快的方法是为每个字符串中的字符构建。一旦构建了同样快速的字符串,您可以说0(1)中是否不存在字符,并且仅当bloom filter说是时才对排序字符串进行二进制搜索。

这是对同一字符串的重复操作还是一次任务?如果这是一个一次性任务,那么在查看所有字符之后,再也没有比检查字符串更好的了。O(n)


如果是重复操作,则可以对字符串进行一些预处理,以加快后续操作。最节省空间和最快的方法是为每个字符串中的字符构建。一旦构建了速度也很快的字符串,您可以说0(1)中是否不存在字符,并且只有当bloom filter说是时,才对排序后的字符串进行二进制搜索。

长度为50的字符串非常短。尝试对此进行优化很可能只会给您带来很少的好处。排序字符串可能比迭代字符串需要更多的时间。@bengoesboom如果在1Mhz处理器上处理10亿个字符串会怎么样?还有人们投票。你需要一次又一次地找出一个字符是否在同一个字符串中吗?如果不是,那么迭代是最快的方法。如何存储Unicode字符,UTF-8、UTF-16或UCS-32?长度为50的字符串非常短。尝试对此进行优化很可能只会给您带来很少的好处。排序字符串可能比迭代字符串需要更多的时间。@bengoesboom如果在1Mhz处理器上处理10亿个字符串会怎么样?还有人们投票。你需要一次又一次地找出一个字符是否在同一个字符串中吗?如果不是,那么迭代是最快的方法。如何存储Unicode字符,UTF-8、UTF-16或UCS-32?这很重要。+1:“我感觉你在试图过度设计一项非常简单的任务。”是的,我也有这种感觉。你是对的。这是过度设计的。可能迭代50个字符比生成任何哈希和检查它们+1都要快:“我感觉你试图过度设计一个非常简单的任务。”是的,我也有这种感觉。你是对的。这是过度设计的。可能迭代50个字符比生成任何哈希并检查它们更快