当前位置: 首页 > wzjs >正文

已经有了域名和服务器怎么做网站网站详情页

已经有了域名和服务器怎么做网站,网站详情页,汉口网站建设制作,二级网站有什么好处目录标题 串的定义顺序串的实现初始化赋值打印串求串的长度复制串判断两个串长度是否相等连接两个串比较两个串内容是否相等插入操作删除操作调试与代码合集 串的模式匹配算法朴素的模式匹配算法KMP算法实现模式匹配 串的定义 定义:由0个或多个字符组成的有限序列&…

目录标题

    • 串的定义
    • 顺序串的实现
        • 初始化
        • 赋值
        • 打印串
        • 求串的长度
        • 复制串
        • 判断两个串长度是否相等
        • 连接两个串
        • 比较两个串内容是否相等
        • 插入操作
        • 删除操作
        • 调试与代码合集
    • 串的模式匹配算法
      • 朴素的模式匹配算法
      • KMP算法实现模式匹配

串的定义

  • 定义:由0个或多个字符组成的有限序列,由一对双引号引起来。记为"S"

顺序串的实现

初始化
    def __init__(self):"""串初始化"""self.str = list()self.length = ()
赋值
    def strAssign(self, string):"""赋值:param string: 待赋值的串:return:"""# 计算串的长度length = len(string)# 赋值self.str = list()for i in range(length):self.str.append(string[i])# 设置串的长度self.length = length
打印串
    def display(self):"""打印:return:"""print('当前串的长度:', end='')for i in range(self.length):print(self.str[i], end='')print()
求串的长度
    def getLength(self):"""求串的长度:return: 串的长度"""return self.length
复制串
    def strCopy(self, string):"""复制串:param string: 待复制的串:return:"""# 将当前串初始化self.str = list()# 循环复制for char in string.str:self.str.append(char)# 设置当前串的长度self.length = string.getLength()
判断两个串长度是否相等
    def strEquals(self, string):"""判断两个串是否相等:param string: 待判定是否相等的串:return: 是否相等 true or false"""if self.length == string.getLength():# 循环,逐一比较for i in range(self.length):if self.str[i] != string.str[i]:break# 判断,如果i等于串的长度,则相等:否则不相等i += 1if i == self.length:return Trueelse:return Falseelse:return False
连接两个串
    def strConnect(self, string2):"""连接两个串:param string2: 串2:return:"""# 生成新串,并初始化newString = String()# 循环for i in range(self.length):newString.str.append(self.str[i])# 循环for i in range(string2.getLength()):newString.str.append(string2.str[i])# 设置串的长度newString.length = self.length + string2.getLength()return newString
比较两个串内容是否相等
    def strCompete(self, string):"""两个串比较大小:param string: 带比较大小的串:return: 1为大于,0为等于,-1为小于"""# 循环,逐个比较两个串相应位置的字符大小index = 0while index < self.length and index < string.getLength():if self.str[index] > string.str[index]:return 1elif self.str[index] < string.str[index]:return -1index += 1# 判断两个串是否还有字符,还存在字符的串大if index < self.length:return 1elif index < string.getLength():return -1else:return 0
插入操作
    def insert(self, offset, string):"""插入:param offset: 插入位置:param string::return:"""# 判断位置是否正确if offset < 0 or offset > self.length:print("插入位置不合法!")return# 备份当前串temp = self.str# 初始化串self.str = list()for i in range(offset):self.str.append(temp[i])# 将待插入的串存入当前串for i in range(string.getLength()):self.str.append(string.str[i])# 将目标串剩余字符存入当前串for i in range(offset, self.length):self.str.append(temp[i])# 设置串的长度self.length = self.length + string.getLength()
删除操作
    def delete(self, offset, len):"""删除:param offset: 删除开始位置:param len: 删除长度:return:"""# 判断位置与长度是否合法if offset < 0 or offset > self.length or len > self.length - offset:print('删除位置不合法!')return# 备份当前串temp = self.str# 初始化串self.str = list()for i in range(offset):self.str.append(temp[i])# 将目标串剩余的字符存入当前串for i in range(offset + len, self.length):self.str.append(temp[i])# 设置串的长度self.length = self.length - len
调试与代码合集
class String:"""串的定义"""def __init__(self):"""串初始化"""self.str = list()self.length = ()def strAssign(self, string):"""赋值:param string: 待赋值的串:return:"""# 计算串的长度length = len(string)# 赋值self.str = list()for i in range(length):self.str.append(string[i])# 设置串的长度self.length = lengthdef display(self):"""打印:return:"""print('当前串的长度:', end='')for i in range(self.length):print(self.str[i], end='')print()def getLength(self):"""求串的长度:return: 串的长度"""return self.lengthdef strCopy(self, string):"""复制串:param string: 待复制的串:return:"""# 将当前串初始化self.str = list()# 循环复制for char in string.str:self.str.append(char)# 设置当前串的长度self.length = string.getLength()def strEquals(self, string):"""判断两个串是否相等:param string: 待判定是否相等的串:return: 是否相等 true or false"""if self.length == string.getLength():# 循环,逐一比较for i in range(self.length):if self.str[i] != string.str[i]:break# 判断,如果i等于串的长度,则相等:否则不相等i += 1if i == self.length:return Trueelse:return Falseelse:return Falsedef strConnect(self, string2):"""连接两个串:param string2: 串2:return:"""# 生成新串,并初始化newString = String()# 循环for i in range(self.length):newString.str.append(self.str[i])# 循环for i in range(string2.getLength()):newString.str.append(string2.str[i])# 设置串的长度newString.length = self.length + string2.getLength()return newStringdef strCompete(self, string):"""两个串比较大小:param string: 带比较大小的串:return: 1为大于,0为等于,-1为小于"""# 循环,逐个比较两个串相应位置的字符大小index = 0while index < self.length and index < string.getLength():if self.str[index] > string.str[index]:return 1elif self.str[index] < string.str[index]:return -1index += 1# 判断两个串是否还有字符,还存在字符的串大if index < self.length:return 1elif index < string.getLength():return -1else:return 0def insert(self, offset, string):"""插入:param offset: 插入位置:param string::return:"""# 判断位置是否正确if offset < 0 or offset > self.length:print("插入位置不合法!")return# 备份当前串temp = self.str# 初始化串self.str = list()for i in range(offset):self.str.append(temp[i])# 将待插入的串存入当前串for i in range(string.getLength()):self.str.append(string.str[i])# 将目标串剩余字符存入当前串for i in range(offset, self.length):self.str.append(temp[i])# 设置串的长度self.length = self.length + string.getLength()def delete(self, offset, len):"""删除:param offset: 删除开始位置:param len: 删除长度:return:"""# 判断位置与长度是否合法if offset < 0 or offset > self.length or len > self.length - offset:print('删除位置不合法!')return# 备份当前串temp = self.str# 初始化串self.str = list()for i in range(offset):self.str.append(temp[i])# 将目标串剩余的字符存入当前串for i in range(offset + len, self.length):self.str.append(temp[i])# 设置串的长度self.length = self.length - lenif __name__ == '__main__':# 16.串string1 = String()str = input('请输入你的第1个串的内容:')string1.strAssign(str)string1.display()print(f"当前string1串的长度为:{string1.getLength()}")# 复制string2 = String()str = input('请输入你的第2个串的内容:')string2.strAssign(str)string2.display()print(f"当前string2串的长度为:{string2.getLength()}")# string1.strCopy(string2)string1.display()print(f"当前string1串的长度为:{string1.getLength()}")# 判断是否相等串result = string1.strEquals(string2)if result:print('两个串相等')else:print('两个串不相等')# 连接两个串string3 = string1.strConnect(string2)string3.display()print(f"当前string3串的长度为:{string3.length}")# 两个串比较大小result = string1.strCompete(string2)if result == 1:print('string1 大于 string2')elif result == -1:print("string1 小于 string2")else:print('string1 等于 string2')# 插入string1.insert(3, string2)string1.display()print(f"当前string1的长度为:{string1.length}")# 删除string1.delete(3, 2)string1.display()print(f"当前string1的长度为:{string1.length}")

串的模式匹配算法

朴素的模式匹配算法

  • 核心思路
    • 也称为暴力搜索算法。
    • 从目标串S的第一个字符开始与模式串P的第一个字符进行匹配
    • 如果匹配,继续逐个匹配后续字符,
    • 如果不匹配,模式串P返回到第一个字符,与目标串S的第二个字符进行匹配,
    • 如果匹配,继续逐个匹配后续字符,
    • 如果不匹配,模式串P返回到第一个字符,与目标串S的第三个字符进行匹配,
    • 以此类推…
  • 最好情况:从第一个字符开始就匹配成功,模式串数量m,则时间复杂度为O(m)
  • 最坏情况:没有匹配成功,每次匹配比较m次,共匹配n-m+1次,时间复杂度为O(n×m).
  • 代码实现
def bruteForce(string1, string2):"""暴力模式匹配:param string2::return:"""i = 0j = 0while i < len(string1) and j < len(string2):if string1[i] == string2[j]:j += 1i += 1else:i = i-j+1j = 0# 如果找到返回索引if j == len(string2):index = i - len(string2)# 否则返回-1else:index = -1return indexif __name__ == '__main__':string1 = "ababdabcd"string2 = "abc"print(bruteForce(string1, string2) + 1)

KMP算法实现模式匹配

  • 核心思路
    • next列表的设计与生成。

    • 使用前后缀列表的方式去解析next值的设定

    • 其中:

      • 前缀列表表示除去最后一个字符后的前面所有子串组成的集合;
      • 后缀列表表示除去第一个字符后的后面所有子串组成的集合。
    • 以“abcabd”为例,求的next列表

    • 1.串‘a’的前缀和后缀均为空集,最长共有元素长度为0,

    • 2.串“ab”的前缀为{“a”},后缀集合为{‘b’},没有相同的前后缀的子串,最长共有元素长度为0,

    • 3.串“abc”的前缀集合为{“a”,“ab”},后缀为{“c”,“bc”},没有相同的前后缀的子串,最长共有元素长度为0,

    • 4.串“abca”的前缀集合为{“a”,“ab”,“abc”},后缀为{“a”,“ca”,“bca”},相同的前后缀子串为“a”,最长共有元素长度为1,

    • 5.串“abcab”的前缀集合为{“a”,“ab”,“abc”,“abca”},后缀为{“b”,“ab”,“cab”,“bcab”},相同的前后缀子串为“ab”,最长共有元素长度为2,

    • 6.串“abcabd”的前缀集合为{“a”,“ab”,“abc”,“abca”,“abcab”},后缀为{“d”,“bd”,“abd”,“cabd”,“bcabd”},没有相同的前后缀子串,最长共有元素长度为0,

    • 7.最后得出字符串“abcabd”的next列表为[-1,0,0,0,1,2].

  • 代码实现
def createNext(pattern):length = len(pattern)# 定义next列表next = [0 for _ in range(len(pattern))]next[0] = -1next[1] = 0# 计算next列表k = -1j = 0while j < length-1:if pattern[k] == pattern[j] or k == -1:j += 1k += 1next[j] = kelse:k = next[k]print(next)return nextdef kmpSearch(text, pattern):# 得到next列表next = createNext(pattern)# 匹配字符串i = 0j = 0while i < len(text) and j < len(pattern):if text[i] == pattern[j] or j == -1:i += 1j += 1else:j = next[j]if j >= len(pattern):return Trueelse:return Falseif __name__ == '__main__':text = "ababdabcabcabd"pattern = "abcabd"print(kmpSearch(text, pattern))
http://www.dtcms.com/wzjs/550117.html

相关文章:

  • 企业做网站上海有了网站源码怎么做app
  • 网站主办者是谁宝安区网络公司
  • 响应式网站设计建设制作南京网站设计建设
  • 网站建设规模广州网站优化软件
  • p2vr做的网站上传各种手艺培训班
  • 备案个人可以做视频网站吗建设电子商务网站的目的
  • 东莞优速网站建设推广罗裕电话营销
  • 400电话网站模板怎么申请小程序
  • 网站图片上传功能怎么做的动漫制作专业电脑配置要求
  • 做网站的属于什么wordpress轻量级插件
  • 网站各种按钮代码湖北黄石网站建设
  • 江苏汇算清缴在哪个网站做典型的四大综合门户网站
  • 手机网站源码wordpress+团购
  • 武夷山网站推广服务广东富盈建设有限公司企业网站
  • 做公司网站计入什么会计科目网站建设维护是做什么会计科目
  • 珠海建设工程备案网站网页制作模板保存
  • 遵义网站制作的网站深圳做网站设计公司
  • 深圳中瑞建设集团官方网站网站建设需求发布
  • 服装网站建设策划方案万维网如何建设网站
  • 网站维护费怎么做会计分录首页设计图
  • 建站的方式有哪些wordpress seo 百度
  • 网站开发分类南京做信息登记公司网站
  • ppt做书模板下载网站有哪些内容网站开发之前前后端不分离
  • 厦门人才网唯一官网招聘济南网络优化网站
  • 您的网站空间已过期绘制网站结构图
  • 个人网站建站目的网站费用预算
  • 国内网站在国外访问很慢有关做有机肥的企业网站
  • 网站制作方案和主要内容金华网站制作策划
  • 免费网站建设公司网页编辑如何添加图片
  • 电商网站做互联网金融网页设计动态效果怎么制作