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. Linux下Jenkins的安装和启动(war包)

    1.下载Jenkins war包 Jenkins jar 下载 或者使用在线地址下载如下 wget http://mirrors.jenkins-ci.org/war/latest/jenkins.w ...

  2. 使用powerdesigner连接MySQL并设置逆向工程

    使用powerdesigner连接MySQL并设置逆向工程 环境:powerdesigner15.1 MySQL5.7 win10 X64 1.安装mysql-connector-odbc-5.3.8 ...

  3. dedecms安装使用

    1.运行 http://域名/install/index.php(比如你的域名是:http://www.dede58.com/,就输入http://www.dede58.com/install/ind ...

  4. 深入理解snp-calling流程——转载

    ------------恢复内容开始------------ GATK4流程 准备配套数据 明确参考基因组版本!!!b36/b37/hg18/hg19/hg38,记住b37和hg19并不是完全一样的, ...

  5. 简单的IP网络

    企业网络架构:小型.扁平化设计,特点:设备少,网络复杂度低,用路由器加交换或路由器就可以实现. 大中型,分层设计,接入层汇聚层核心层,特点:设备众多,网络组建复杂度高.终端设备较多,偏平化设计不适合. ...

  6. jquery.easyui.min.js:12401 Uncaught TypeError: Cannot read property 'combo' of undefined jquery.easyui.min.js:12401

    踩坑中成长! jquery1.4.1升级到1.4.3 点击添加报错. 一步步调试js,发现是combox使用问题. 前端报错,未声明,js是easyui的所以只有jsp和js用法问题.看了官方用法,瞬 ...

  7. Android自动化测试

    一.环境搭建 必备软件: Windows或MacOS系统的电脑 python pycharm Android SDK(需要配置环境变量,网上有教程) Appium客户端(需要配置Android SDK ...

  8. python+pytest接口自动化

    本篇文章是用python+pytest写了一个简单的接口自动化脚本,外加循环请求接口的语法,大家可以参考~ 实例一: import requestsimport pytestimport time c ...

  9. daimayuan第二课(1.二叉树的遍历,2.二叉树的最近公共祖先,3.二叉搜索树)

    二叉树的最近公共祖先: 1:概念:就是两个节点在这棵树上深度最大的公共的祖先节点. 换句话说,就是两个点在这棵树上距离最近的公共祖先节点. 2:因为是基础课,所以tarjan和倍增lca就留到中级课再 ...

  10. 关于FPGA学习的疑惑

    记录心路历程--第一次真正意义上的找工作. 最近在学习小梅哥的FPGA的过程中,总是学习着前面的东西忘着后面的,进行了过一次复习,我准备是在每个章节学完之后,再复习之前的章节,可这样是真的很耗费时间. ...