Python链表与子串元素朴素匹配和链表元素替换
2018-01-13 17:06
246 查看
朴素匹配可以换成KMP算法,这样的话,时间复杂度能达到线性
主要考虑是建立新的链表子串替换原链表中间的匹配项。不多说了,直接上代码
class
Node:
def__init__(self,element=None,next_=None,prev=None):
self._element=element
self._next=next_
self._prev=prev
class
StrList:
def__init__(self,string1):
self._head=None
self._rear=None
self._len=0
i=0
n=len(string1)
while i<n:
ifself._head
is None:
p=Node(string1[0])
self._head=p
self._rear=p
self._len+=1
else:
p=Node(string1[i])
p._prev=self._rear
self._rear._next=p
self._rear=p
self._len+=1
i +=1
defprintall(self):
p=self._head
while pis
notNone:
print(p._element)
p=p._next
defget_len(self):
returnself._len
defmatch(self,patternstr):
n=len(patternstr)
i,j=0,0
p=self._head
while i<nand
p is
notNone:
if patternstr[i]==p._element:
i+=1
j+=1
p=p._next
else:
j=j-i+1
while i>0:
p=p._prev
i-=1
p=p._next
i=0
if i==n:
return j-i
return-1
defreplace(self,patternstr,restr):
ifself.match(patternstr)==-1:
return"No match"
q=self._head
t=self._head
i=self.match(patternstr)
j=0
n=len(restr)
length=i+len(patternstr)
shead=None
srear=None
while i>0: #set
break point of first match point
t=t._next
i-=1
while length>0: #set
break point of second match point
q=q._next
length-=1
while j<n: #establish a new link
string independently
if sheadis
None:
shead=Node(restr[j])
srear=shead
else:
s=Node(restr[j])
s._prev=srear
srear._next=s
srear=s
j+=1
if t._previs
None: #attach new link string to two break points
self._head=shead
srear._next=q
q._prev=srear
elif qis
None:
self._rear=srear
t._prev._next=shead
shead._prev=t._prev
else:
t._prev._next=shead
shead._prev=t._prev
srear._next=q
q._prev=srear
主要考虑是建立新的链表子串替换原链表中间的匹配项。不多说了,直接上代码
class
Node:
def__init__(self,element=None,next_=None,prev=None):
self._element=element
self._next=next_
self._prev=prev
class
StrList:
def__init__(self,string1):
self._head=None
self._rear=None
self._len=0
i=0
n=len(string1)
while i<n:
ifself._head
is None:
p=Node(string1[0])
self._head=p
self._rear=p
self._len+=1
else:
p=Node(string1[i])
p._prev=self._rear
self._rear._next=p
self._rear=p
self._len+=1
i +=1
defprintall(self):
p=self._head
while pis
notNone:
print(p._element)
p=p._next
defget_len(self):
returnself._len
defmatch(self,patternstr):
n=len(patternstr)
i,j=0,0
p=self._head
while i<nand
p is
notNone:
if patternstr[i]==p._element:
i+=1
j+=1
p=p._next
else:
j=j-i+1
while i>0:
p=p._prev
i-=1
p=p._next
i=0
if i==n:
return j-i
return-1
defreplace(self,patternstr,restr):
ifself.match(patternstr)==-1:
return"No match"
q=self._head
t=self._head
i=self.match(patternstr)
j=0
n=len(restr)
length=i+len(patternstr)
shead=None
srear=None
while i>0: #set
break point of first match point
t=t._next
i-=1
while length>0: #set
break point of second match point
q=q._next
length-=1
while j<n: #establish a new link
string independently
if sheadis
None:
shead=Node(restr[j])
srear=shead
else:
s=Node(restr[j])
s._prev=srear
srear._next=s
srear=s
j+=1
if t._previs
None: #attach new link string to two break points
self._head=shead
srear._next=q
q._prev=srear
elif qis
None:
self._rear=srear
t._prev._next=shead
shead._prev=t._prev
else:
t._prev._next=shead
shead._prev=t._prev
srear._next=q
q._prev=srear
相关文章推荐
- python 正则表达式 字符串的 匹配 替换 分割 查找
- 001_016 Python 替换字符串中的子串
- python替换字符串中的子串 %(xxxx)s
- 数据结构实例<三>(匹配链表所有元素删除后并返回新的链表)入门
- python对找到的匹配项作处理后再替换回去
- python使用正则表达式替换匹配成功的组并输出替换的次数
- Python利用正则表达式匹配并截取指定子串及去重的方法
- 001_017 Python 替换字符串中的子串string.template
- Python中替换元素
- python替换字符串中的子串 %(xxxx)s
- python里使用正则表达式来替换匹配成功的组并限定替换的次数
- python的N个小功能(文件内容的匹配替换)
- Python中替换元素
- Python3.4-文本-替换字符串中的子串
- 【思路】ArrayList中匹配元素替换至指定位置
- Python实现查找匹配项作处理后再替换回去的方法
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- python_lintcode_115不同的路径 II_112删除排序链表中的重复元素
- 【python cookbook】 替换字符串中的子串
- (串的模式匹配4.6.1)POJ 3080 Blue Jeans(使用朴素的模式匹配算法求最长的公共子串)