- 按键认证大神
- 2699998
- 3587
- 11
- 2173 朵
- 7386 个
- 1021 个
- 91120
- 2014-08-23
|
1#
t
T
发表于 2022-10-21 22:07
|
|只看楼主
题目描述 编写一个函数,该函数接受消息字符串并从最高到最低返回字符串的本地顶部。
字符串顶部是通过以下方式显示字符串:
下一个顶部总是比上一个高1个字符。对于上面的示例,abcdefghijklmnopqrstuvwxyz1234输入字符串的解决方案是3pgb。
当消息字符串为空时,返回一个空字符串。 输入字符串可能很长。确保您的解决方案具有良好的性能。
题目难度:简单 题目来源:String tops | Codewars 题目交流: 584781753
|
- Import "SmAssert.dll"
- Function 处于顶端的字符串(消息字符串)
- // 您的代码写在这里
- End Function
- SmAssert.That 处于顶端的字符串(""), "=", ""
- SmAssert.That 处于顶端的字符串("12"), "=", "2"
- SmAssert.That 处于顶端的字符串("abcdefghijklmnopqrstuvwxyz12345"), "=", "3pgb"
- SmAssert.That 处于顶端的字符串("abcdefghijklmnopqrstuvwxyz1236789ABCDEFGHIJKLMN"), "=", "M3pgb"
复制代码 参考题解- Import "SmAssert.dll"
- Function 处于顶端的字符串(消息字符串)
-
- '【作者】:神梦无痕
- '【QQ】:1042207232
- '【Q群】:584781753
-
- Dim top_msg_index
-
- // 当消息字符串为空时,返回一个空字符串
- If 消息字符串 = "" Then
- 处于顶端的字符串 = ""
- Else
- top_num_list = Array()
- ReDim top_num_list(Len(消息字符串)-1)
- For n = 1 To Len(消息字符串)
- // 通过数学计算,可以得出第n个顶部值所在的位置为:2 * (n ^ 2) - n + 1
- top_msg_index = 2 * (n ^ 2) - n + 1
- // 当最后一个顶部值所在的索引位置 大于 字符长度,则退出循环
- If top_msg_index > Len(消息字符串) Then
- Goto break
- End If
- // 获得字符串的顶部值,并按倒序排序
- top_num_list(n-1) = Mid(消息字符串, top_msg_index, 1)
- Next
- Rem break
- // 列表格式转成字符串格式,并反转字符串
- 处于顶端的字符串 = StrReverse(Join(top_num_list, ""))
- End If
- End Function
- SmAssert.That 处于顶端的字符串(""), "=", ""
- SmAssert.That 处于顶端的字符串("12"), "=", "2"
- SmAssert.That 处于顶端的字符串("abcdefghijklmnopqrstuvwxyz12345"), "=", "3pgb"
- SmAssert.That 处于顶端的字符串("abcdefghijklmnopqrstuvwxyz1236789ABCDEFGHIJKLMN"), "=", "M3pgb"
复制代码 插件下载【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误
|