【发布时间】:2014-12-12 15:16:25
【问题描述】:
由于 .NET 以 UTF-16 存储字符串,并且考虑到它是可变长度编码的事实(单个代码单元可以占用 2 或 4 个字节)。
这是否意味着字符串索引 (s[n]) 需要 O(n)?
【问题讨论】:
-
不,索引字符串会产生 System.Char,而不是可以存储上层代码点的类型。
标签: .net string asymptotic-complexity
由于 .NET 以 UTF-16 存储字符串,并且考虑到它是可变长度编码的事实(单个代码单元可以占用 2 或 4 个字节)。
这是否意味着字符串索引 (s[n]) 需要 O(n)?
【问题讨论】:
标签: .net string asymptotic-complexity
.Net 字符串不将非 BMP 代码单元视为单个字符;字符串 API 将代理对作为两个字符返回。
因此,就string而言,UTF-16不是变长编码。
如果您想查看 UTF-32 代码单元,请调用 Char.GetNumericValue(),即 O(n)。
【讨论】:
String 不支持它。