https://leetcode.cn/problems/evaluate-the-bracket-pairs-of-a-string/solutions/2057593/s-by-yhm138_-nqxe/?orderBy=most_votes&languageTags=elixir-3

函数式编程三兄弟哈,leetcode什么时候支持haskell?

Elixir

名词解释

:binary.encode_unsigned(c)   codepoint转到bitstring
<< >> 空的bitstring
res<> <<"hello">> 拼接2个bitstring
?\s 拿到字符's'的codepoint
?? 拿到字符'?'的codepoint
%{} 空字典

代码

defmodule Solution do
@spec evaluate(s :: String.t, knowledge :: [[String.t]]) :: String.t
def evaluate(s, knowledge) do
dict = knowledge |> Enum.reduce(%{}, fn [k, v], acc -> Map.put(acc, k, v) end)
# dict = Enum.into(Enum.map(knowledge, fn [key, val] -> {String.to_existing_atom(key), val} end), %{})
for << c<-s >>, reduce: {false, <<>>, <<>>} do
{add_key, key, res} ->
cond do
c==?\( ->
{true, key, res}
c==?\) ->
{false, << >>, res<> Map.get(dict,key,<<"?">>) }
true ->
case add_key do
true->{add_key, key<>:binary.encode_unsigned(c), res}
false->{add_key, key, res<>:binary.encode_unsigned(c)}
end end
end
|> elem(2) #下标从0开始,取三元组里的res
end
end # :io.format("before, The value of res is: ~p~n", [res])

Erlang

名词解释

iolist_to_binary([Res, <<"?">>])    拼接bitstring
<< >> 空的bitstring
element(3,Res) 元组的第3个元素
$( 拿到'('的codepoint
erlang:binary_to_list bitstring转list

代码


getOrDefault(Dict, Key, DefaultValue) ->
case dict:find(Key, Dict) of
{ok, Value} ->
Value;
error ->
DefaultValue
end. evaluate(S, Knowledge) ->
Dict = lists:foldl(fun([K, V], Acc) -> dict:store(K, V, Acc) end, dict:new(), Knowledge),
MyFunc =fun(C, {AddKey, Key, Res}) ->
case C of
$( -> {true, Key, Res};
$) -> {false, <<>>, iolist_to_binary([Res, getOrDefault(Dict,Key, <<"?">>)])};
_ ->
case AddKey of
true -> {AddKey, iolist_to_binary([Key,C]), Res};
false -> {AddKey, Key, iolist_to_binary([Res,C])}
end
end
end,
Res = lists:foldl(MyFunc, {false,<< >>,<< >>}, erlang:binary_to_list(S)),
element(3,Res). % io:format("Sum=~p ~n", [Sum]),

Racket

名词解释

(car ele)  取ele的第一个元素
(cadr ele) 取ele的第二个元素
(string->list s) bitstring 切分为list
(string ele) 可以把#\( 转成"("
(string-append key c) 字符串拼接,key在前,c在后

代码

(define (get-or-default dict key default-value)
(let ([result (hash-ref dict key 'not-found)])
(if (eq? result 'not-found) default-value result))
) (define/contract (evaluate s knowledge)
(-> string? (listof (listof string?)) string?)
(define my-dict (make-hash))
(for-each
(lambda (ele) (
hash-set! my-dict (car ele) (cadr ele)
))
knowledge) (define my-list (string->list s))
(displayln my-list)
(define final_acc (foldl
(lambda (ele acc) ;iterator 和 acc
(define c (string ele))
(define addkey (list-ref acc 0))
(define key (list-ref acc 1))
(define res (list-ref acc 2))
(match c
["(" (list #t key res)]
[")" (list #f "" (string-append res (get-or-default my-dict key "?")) )]
[else
(match addkey
[#t (list addkey (string-append key c) res)]
[#f (list addkey key (string-append res c))]
)
]
)
)
(list #f "" "") ;acc初始值
my-list)) ;foldl主体
(define ret (list-ref final_acc 2))
ret
)

[Elixir/Erlang/Racket] 模式匹配,字符串,哈希表,格式化输出的更多相关文章

  1. Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)

    创建: 2018/02/28 完成: 2018/03/04 更新: 2018/05/03 给主要标题加上英语, 方便页内搜索 [任务表]TODO 范围型(Range)与Stride型  与范围运算符相 ...

  2. python_字符串,元组,格式化输出

    一.字符串 1.字符串是有成对的单引号或者双引号括起来的.例如:name="张三",sex="女" 2.字符串的索引是从0开始的 3.字符串的切片 a.单个字符 ...

  3. 字符串与C51的格式化输出

    一字符数组和字符指针: 字符指针可以用字符串对其直接初始化和随时赋值:而字符数组可以用字符串进行初始化,但不能用字符串对其进行随时赋值(但此时可以定义一个字符串指针指向字符数组,然后用字符串对指针随时 ...

  4. Java知多少(79)哈希表及其应用

    哈希表也称为散列表,是用来存储群体对象的集合类结构. 什么是哈希表 数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系.当要查找一个对象时,只能以某种顺 ...

  5. Python基础__字符串拼接、格式化输出与复制

    上一节介绍了序列的一些基本操作类型,这一节针对字符串的拼接.格式化输出以及复制的等做做详细介绍.一. 字符串的拼接 a = 'I', b = 'love', c = 'Python'. 我们的目的是: ...

  6. kmp和hash 字符串处理 哈希表

    来自http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 并进行自己的简单整 ...

  7. 剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口

    剑指 Offer 48. 最长不含重复字符的子字符串 Offer_48 题目详情 解法分析 解法一:动态规划+哈希表 package com.walegarrett.offer; /** * @Aut ...

  8. 【字符串哈希】【哈希表】Aizu - 1370 - Hidden Anagrams

    给你两个4k长度的串,问你最长公共子串.两个子串相同被定义为所有字母的出现次数分别相同即可. 就枚举第一个串的所有子串,将字母出现的次数看作一个大数,进行哈希(双关键字),塞到哈希表里面.然后枚举第二 ...

  9. 【二分答案】【哈希表】【字符串哈希】bzoj2946 [Poi2000]公共串

    二分答案,然后搞出hash值扔到哈希表里.期望复杂度O(n*log(n)). <法一>next数组版哈希表 #include<cstdio> #include<cstri ...

  10. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

随机推荐

  1. 记录一次echarts 中bar 定时跳跃并显示内容

    查看echarts api -----   https://www.echartsjs.com/zh/api.html#echarts 搜索 1.dispatchAction   执行的关键 2.hi ...

  2. 使用signalr不使用连接服务器和前台的js的方法

    1:使用这种方式,,就不需要前后台链接的js 2:新建一个empty的MVC项目 3:新建一个controller和index.html 4: 新建一个signalr 集线器类名为PersonHub, ...

  3. Mysql语句练习

    某宾馆其关系模式如下:Room(房间编号,房间类型,价格)Customer(顾客编号,顾客姓名,年龄,电话)RC(房间号,顾客编号,入住日期,入住天数) 1 create database Hotel ...

  4. git和coding的使用

    1.注册 coding ::::::https://coding.net/ 2.个人设置中添加上邮箱账号和密码 3.下载git 4.在coding中新建项目,并对项目初始化---生成分支,会生成url ...

  5. pycharm 安装步骤

    1.双击安装包 2.点击next 3.选择安装目录后点击next进入下一步 4.根据你电脑的实际情况选择安装32位还是64位 5.勾选 .py 后即可点击next进入下一步 6.默认,直接next 7 ...

  6. ZSTUOJ刷题⑨:Problem H.--尖兵

    Problem H: 尖兵 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4691  Solved: 2112 Description 星光人已经出发了 ...

  7. 新手:git回滚代码,合并代码解决冲突

    回滚到某个tag: git reset --hard 70438034dc git push -f 合并---解决冲突---提交: Step 1. Fetch and check out the br ...

  8. Jupyter lab 切换kernel

    在使用pytorch的时候需要用到pandas这个包,报错说"no module named pandas", 但是我在终端查找了conda 装了pandas,所以不是安装的问题, ...

  9. https://计算机等级分类总结

    4个等级: 一级:定位为满足人们在一般性工作中对计算机的应用,重点是操作能力的考核: 二级:定位为计算机程序员,可谓"计算机蓝领". 三级:定位为"开发工程师" ...

  10. kubctl

    kubctl delete 命令:删除资源 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效 delete 描述: 按文件名.stdin.资源和名称或按资源和标签选择器删除资 ...