好长时间没来了, 看到楼主这个问题不禁手痒, 也来写写自己的看法.
如果用图林机的模式来解决这个问题的话, 不免要走上使用RE的路. 不是说RE不好, RE本身非常强大, 不过在这里就比较尴尬一点, 因为想要动态地解决这个问题, 一个或者几个静态的RE是不太可能做到的. RE比较脆弱的一点就在这里体现出来了. 如果用到的字符出现变动, 比如说从{A, B, C}变到{A, B, C, D}的话, RE势必也要作出相应的改变, 这在程序运行的时候是不太可能做到的.
为什么不用Graph Transition(图)来尝试解决这个问题呢? 用图论来看这个问题, 一切都变得很简单. 所有可能出现的路线只要满足两个条件, 对于n个字符来说:
1. 每个字符不能重复
2. 字符长度等于n
这样就能动态地解决这个问题. 当然, 如果楼主是想动态地对每个状态做出不同的处理的话, 除了用programatically的方法(switch)以外不太可能了, 要是楼主真的解决了的话, 可以写个论文区申请图林奖了.
至于解决这个问题的复杂度, 用最简单的方法应该是 o(n!) 相当于:
for(i = 0; i < n, i++) {
for(j = 0; j < n-1; j++) {
...
}
} |