我正在尝试使用ember.js库在javascript中编写一个应用程序,该库很大程度上依赖于Handlebars模板系统.但是,我正在使用FLASK,它也使用jinja模板系统.
是否可以同时使用两个模板渲染器?或者我需要使用一个而不是另一个.任何有使用flask和ember.js经验的人都知道哪一个可能更容易替换另一个?(也许把手更容易替换Jinja,反之亦然).
面试关于代码战斗的哈希图问题,需要帮助优化我的暴力解决方案。问题是这样的:
给定一个字符串 str 和一对数组(指示字符串中的哪些索引可以交换),返回执行允许的交换后按字典顺序排列的最大字符串。您可以任意多次交换索引。
例子
For str = "abdc" and pairs = [[1, 4], [3, 4]], the output should be
swapLexOrder(str, pairs) = "dbca".
Run Code Online (Sandbox Code Playgroud)
通过交换给定的索引,您将得到字符串:“cbda”、“cbad”、“dbac”、“dbca”。此列表中按字典顺序最大的字符串是“dbca”。
我目前的解决方案
通过不断添加所有可能性,直到没有新的解决方案为止进行暴力破解。这对于 来说太慢了swapLexOrder('dznsxamwoj',[[1,2],[3,4],[6,5],[8,10]])
,无法在我的机器上完成。有什么优化提示吗?通过的一个更简单的测试用例是swapLexOrder('abdc,[[1,4],[3,4]])= dbca
def swapLexOrder(str, pairs):
d = {}
d[str]=True
while True:
oldlen=len(d)
for x,y in pairs:
for s in d.keys():
d[swp(s,x,y)]=True
if len(d) == oldlen:
#no more new combinations.
return sorted(d)[-1]
def swp(str,x,y):
x=x-1
y=y-1
a=str[x]
b=str[y]
return str[0:x]+b+str[x+1:y]+a+str[y+1:]
Run Code Online (Sandbox Code Playgroud)