【发布时间】:2014-12-29 10:21:09
【问题描述】:
我的一个朋友刚刚在谷歌面试,因为无法给出这个问题的答案而被拒绝了。
几天后我有自己的面试,似乎无法找到解决问题的方法。
问题来了:
给你一个模式,例如 [a b a b]。您还获得了一个 字符串,例如“redblueredblue”。我需要编写一个程序告诉 字符串是否遵循给定的模式。
几个例子:
模式:[a b b a] 字符串:catdogdogcat 返回 1
模式:[a b a b] 字符串:redblueredblue 返回 1
模式:[a b b a] 字符串:redblueredblue 返回 0
我想到了一些方法,比如获取模式中唯一字符的数量,然后找到字符串的许多唯一子字符串,然后使用哈希图与模式进行比较。但是,如果 a 的子字符串是 b 的一部分,这将是一个问题。
如果你们中的任何人能帮我解决这个问题,那就太好了。 :)
更新:
添加信息:模式中可以有任意数量的字符 (a-z)。两个字符不会代表相同的子字符串。另外,一个字符不能代表一个空字符串。
【问题讨论】:
-
图案有什么限制吗?仅仅是符号的任意组合吗?
-
与模式中特定字母匹配的任何字符串都可以为空吗?
-
另外,模式字符串中有多少个可能的字符?总是a和b,还是可以有更多的字符?
-
模式中可以有任意数量的字符。两个字符不会代表相同的子字符串。另外,一个字符不能代表一个空字符串。
-
有一个简单的解决方案,它通过将字符串的所有分区枚举为子字符串并检查它是否与模式字符串匹配,但这可能需要模式字符串长度的指数时间。我很好奇是否有一种从根本上更快的方法,或者这是否已知是 NP 完全的(或 co-NP 完全的?)
标签: string algorithm dynamic-programming graph-algorithm