我想要一个Python函数,它接受一个字符串,并返回一个数组,其中数组中的每个项目都是一个字符,或者是另一个这样的数组.嵌套数组在输入字符串中以'('和以')'开头标记.
因此,该函数将如下所示:
1) foo("abc") == ["a", "b", "c"]
2) foo("a(b)c") == ["a", ["b"], "c"]
3) foo("a(b(c))") == ["a", ["b", ["c"]]]
4) foo("a(b(c)") == error: closing bracket is missing
5) foo("a(b))c") == error: opening bracket is missing
6) foo("a)b(c") == error: opening bracket is missing
Run Code Online (Sandbox Code Playgroud)
注意:我更喜欢纯粹功能性的解决方案.
Java字符串是不可变的,并且使用相同的值实例化多个字符串会返回相同的对象指针.(这是否有一个术语?"池化"似乎适合,但这已经指的是通过减少实例化来进行缓存以节省时间.)
Java是否也使用其他(用户定义的)不可变类来执行此操作(没有术语的事情)?Java甚至可以检测到一个类是不可变的,还是这个字符串类是唯一的?
可以使用Prim算法或Kruskal算法来找到顶点/节点和边/链接集合的最小生成树/图.我想要的是一种算法,它可以找到该集合的最小生成图,但结果图只需要包含任意选择的节点,而不是所有节点.如果结果图包含的节点数多于所需的节点数,那也没关系.
这样的算法存在吗?在修改图形以仅包含所需节点后,也许可以使用Prim(或Kruskal)算法?但是,我不确定如何在保持连接性的同时修改图形.
例如,假设我们有一个菱形的起始图(括号中的链接成本):
A
(2)/ \(1)
B C
(2)\ /(5)
D
Run Code Online (Sandbox Code Playgroud)
现在,我们任意决定只需要节点A和D. 如果我们从A开始,我们仍然希望它采用左路径,因为((2 + 2)<(1 + 5)).
假设我们稍微修改了图表:
A
(2)/ \(1) (2)
B C ------E
(2)\ /(5)
D
Run Code Online (Sandbox Code Playgroud)
如果我们确定只需要节点A,D和E,我们就会发现成本最低的路径不一定是链路最少的路径.考虑A - B - D和A - C - E成本为7,但A - C - D和C - E成本为8.
在Java中,您可以读取和写入文件.但是JVM可以在许多系统上运行,这些系统可能有不同的方式来存储文件和相关数据.如何编写适用于每个系统的JVM代码?
使用本机方法的级别是多少?JVM是否具有必须为每个系统实现的特定文件功能集,然后可以通过任何语言调用它们?或者在JVM上运行的每种语言(如Java或Scala)都必须自己完成吗?