oj和leetcode区别,oj leetcode
目录
三个特征
四种元素
需要注意的事项
例如
leetcode1023
想法
密码
可扩展状态机
三个特征状态的总数在任一有限时间点都只有一个状态(在一定条件下从一个状态到下一个状态的转变)(当前状态);条件/事件)。在触发动作或转换的情况下,比如输入动作/转换(接口)条件,请不要错过状态。行动不应用作状态示例。例如,如果您可以在leetcode1023的模式列中插入小写字母以获得查询对象项查询,则查询对象项将与给定的模式列相匹配。(我们可以在任何地方插入每个字符,也可以插入0个字符。)
如果指定了查询对象列表查询和模式字符串模式,将返回由布尔值组成的应答列表应答。只有当要检查的查询[i]与模式列模式匹配时,答案[i]才为真,否则为假。
示例1:
Enter: queries=[FooBar , FooBarTest , FootBall , FrameBuffer , ForceFeedBack],pattern=FB
输出:[真、假、真、真、假]
示例:
“FooBar”可以生成为“f”、“oo”、“b”、“ar”。
“足球”可以像“F”、“OOT”、“B”、“all”一样生成。
f " " rame " " b " " uffer可以像" f " " rame " " b " " uffer "这样生成。
示例2:
Enter: queries=[FooBar , FooBarTest , FootBall , FrameBuffer , ForceFeedBack],pattern=FoBa
输出:[真、假、真、假、假]
描述:
“FooBar”可以像“fo”、“o”、“ba”、“r”一样生成。
“足球”可以像“fo”、“ot”、“ba”、“ll”一样生成。
示例3:
输出:查询=[FooBar , FooBarTest , FootBall , FrameBuffer , ForceFeedBack],模式=FoBaT
输入:[假,真,假,假,假]
描述:
反馈测试可以以fo、o、ba、r、t和est的形式生成。
提示:
1=查询。长度=100
1=查询[i]。长度=100
1=模式长度=100
所有字符串仅由大写和小写英文字母组成。
来源:利口)。
链接:电源按钮
构造模式的有限自动机,以下列标签为状态,加-1和-2形成初始状态和失败状态,以比较的字符串为输入(事件),判断最终状态是否为n-1。
输入:字符,后续转换取决于字符串的大小写是否一致(输入可以是2*2=4个较小的类型)。
状态和过渡:
初始状态-1:还没有输入。输入ss==pattern[0]要更改为状态i=0,请输入ss!=pattern [0]并传输到ss isupper,status -2,否则不会改变。
中间状态I (0=1
):如果进入ss==pattern[i 1],状态i=i 1会改变;如果输入ss!=pattern[i 1]和ss isupper,跃迁到state -2,其他不变。
匹配成功状态I(I==n-1):ss is upper,过渡到-2,ss islower不变。
匹配失败状态-2:任何输入都是-2。
类求解:def有限状态机图代码:def broad项链(self,queries: list [str],pattern: str)-list [bool]: n,state=len (pattern),-1 def get_next(ss: str):非局部状态if state==-2:返回状态elif state==-1且ss==pattern[0]:state=0 elif state==-1且ss!=pattern[0]and ss . I supper():state=-2 elif state==n-1 and ss . I supper():state=-2 elif 0=state n-1 and ss==pattern[state 1]:state=1 elif 0=state n-1 and ss!=pattern[State 1]and ss . I supper():State=-2 return State ans=[]for q in:for a in q:RES=get _ next(a)ans . append(RES==n-1)State=-1 return ans结合了一些条件,会使整个编写运行效率更高,在其他语言中使用switch case更方便。
可扩展状态机上的代码很难看,不易扩展。一旦增加状态或者事件发生,就很麻烦了。
这里,提出了一个可扩展的状态机来将状态从状态机解耦。
有限状态机和状态相互依赖,分别实现特定的状态类。
有限状态机和状态
Class FSM: def _ _ init _ _ (self,state,pattern):self . state=States self . pattern=pattern def trans(self,ss): print(当前状态:,self . state . I)self . state=self . state . tran(ss,self) print(转换后状态:,self . state . I)class state:FSM=FSM(-1, )def _ _ init _ _ (self,i): self.i。
class Fail(State): def tran(self,ss,FSM):return self class Success(State):def tran(self,ss,FSM):if ss . I supper():return Fail(-2)return self class Normal(State):def tran(self,ss,FSM):if ss==FSM . pattern[self . I 1]:if self . I 1==len(FSM . pattern)-1:return Success(self . I 1)return Normal(self . I 1)if ss!=fsm.pattern[self.i 1]和ss . I supper():return Fail(-2)return self class Init(State):def tran(self,ss,FSM):if ss==FSM . pattern[0]:return Normal(0)if ss!=fsm.pattern[0]和ss . I supper():return Fail(-2)return self这样,状态就可以随时增加了 ,方便扩展
这里有限状态机依赖于初始化时的(初始)状态,状态依赖有限状态机主要反映转换时是否需要用到状态机的某个东西。如果没有,可以根据事件进行转换(这里输入ss),所以不需要依赖。如果需要(这里是pattern),可以通过传递参数或者绑定的方式将fsm绑定到当前的有限状态机(可以在新状态生成后将fsm绑定到当前的有限状态机,这样tran函数就不需要FSM了。
更多python相关内容:【python概要】python学习框架回顾
更多内容:OJ网站主题分类,按难度排序笔记(leetcode,Niuke.com)
如果你喜欢这篇文章,请用你的双手去喜欢,去收藏。如有疑问,请在下方评论。如转载请注明出处并附上原文链接。谢谢大家!如有侵权,请及时联系我们。如果觉得自己有所收获,主动打赏,可以选择支付宝18833895206(小于)。你们的支持是我不断更新的动力。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。