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

搭建网站吧最新国际新闻 大事件

搭建网站吧,最新国际新闻 大事件,评析政府网站的建设,电商网站开发项目计划书文章目录 算法总览题目1371.每个元音包含偶数次的最长子字符串 算法总览 题目 1371.每个元音包含偶数次的最长子字符串 1371.每个元音包含偶数次的最长子字符串 参考博主的讲解 思路分析:就是得使用前缀和记录情况,dp[i][j]表示s[0] 到s[i] 中&…

文章目录

  • 算法总览
  • 题目
    • 1371.每个元音包含偶数次的最长子字符串

算法总览

题目

1371.每个元音包含偶数次的最长子字符串

1371.每个元音包含偶数次的最长子字符串
在这里插入图片描述
在这里插入图片描述

参考博主的讲解

思路分析:就是得使用前缀和记录情况,dp[i][j]表示s[0] 到s[i] 中,j出现的次数

前缀和+剪枝

在这里插入图片描述

class Solution:def findTheLongestSubstring(self, s: str) -> int:# 使用字典将元音映射为数字,方便后续的记录i_mapper = {"a": 0,"e": 1,"i": 2,"o": 3,"u": 4}n = len(s)# pre[i][j]表示s[0] 到 s[i] 之间字符j所出现的次数pre = [[0] * 5 for _ in range(n)]# prefor i in range(n):for j in range(5):# 注意这里其实没有对i=0进行处理,因为-1在python中表示最后一个元素,所以不会越界报错if s[i] in i_mapper and i_mapper[s[i]] == j:pre[i][j] = pre[i - 1][j] + 1else:pre[i][j] = pre[i - 1][j]# check(l,r)表示查询s[l]到s[r]中的情况def check(l, r):for i in range(5):# 特别处理s[l]的情况,不然就是 pre[r][i] - pre[l-1][i],这个时候就得判断l==0的情况if s[l] in i_mapper and i == i_mapper[s[l]]: cnt = 1else: cnt = 0if (pre[r][i] - pre[l][i] + cnt) % 2 != 0: return Falsereturn True# 由于是剪枝,i从最长的子序列的长度对应的末尾的下标开始计算for i in range(n - 1, -1, -1):# j表示长度为i的子序列的开始的下标for j in range(n - i):if check(j, i + j):return i + 1return 0

前缀和+状态压缩


class Solution:def findTheLongestSubstring(self, s: str) -> int:mapper = {"a": 1,"e": 2,"i": 4,"o": 8,"u": 16}# seen使用哈希表存储每一个状态组合所第一次出现的下标,最多就是2^5就是32种情况seen = {0: -1}# res 用于记录更新答案,cur用于计算当前的奇偶组合的值res = cur = 0for i in range(len(s)):if s[i] in mapper:cur ^= mapper.get(s[i])# 全部奇偶性都相同,相减一定都是偶数if cur in seen:res = max(res, i - seen.get(cur))else:seen[cur] = ireturn res

class Solution:def maxDifference(self, s: str, k: int) -> int:s = list(map(int, s))ans = -inffor x in range(5):for y in range(5):if y == x:continue#cur_s 记录当前0,1,2,3,4出现的次数,pre_s则是先前的情况# cur_s是维护0-i的情况,pre_s是维护0-left的情况cur_s = [0] * 5pre_s = [0] * 5# min_s = [[inf, inf], [inf, inf]]left = 0for i, v in enumerate(s):cur_s[v] += 1r = i + 1# 一直在维护左边界的情况,r-left>=kwhile r - left >= k and cur_s[x] > pre_s[x] and cur_s[y] > pre_s[y]:# 检验是奇数还是偶数,奇数&1为1,偶数&1为0p, q = pre_s[x] & 1, pre_s[y] & 1min_s[p][q] = min(min_s[p][q], pre_s[x] - pre_s[y])pre_s[s[left]] += 1left += 1if r >= k:# cur_s[x] & 1 ^ 1 和 cur_s[y] & 1 奇偶不同ans = max(ans, cur_s[x] - cur_s[y] - min_s[cur_s[x] & 1 ^ 1][cur_s[y] & 1])return ans
http://www.jinmujx.cn/news/79116.html

相关文章:

  • 美工设计网站推荐建站官网
  • php 信息分类网站开发南通百度seo代理
  • 校园淘宝店网站开发优化关键词规则
  • 在线文字编辑器网站推广seo招聘
  • 页面制作多少钱宁波seo营销
  • 网站建设中成本怎么描述万物识别扫一扫
  • 网站建设金手指百度搜索资源
  • 2017酷站推荐网站廊坊关键词优化报价
  • 天猫网站是用什么技术做的百度主页入口
  • 个人网站制作源代码下载如何找到网络公关公司
  • 免费做网站的网店运营的工作内容
  • nginx wordpress 伪静态优化设计电子课本下载
  • 网页工具栏怎么还原seo优化推广流程
  • 鹤壁集团网站建设seo教程技术整站优化
  • 南宁网站建公司电话号码nba最新消息球员交易
  • 聊城哪里可以学网站建设呢可以发广告的100个网站
  • 网站正在建设中 动态郑州做网站推广资讯
  • 网站推广临沂吉安seo
  • 做网站哪些软件沈阳seo技术
  • 惠州免费网站建设在线生成个人网站
  • 做网站的开场白手机优化
  • 石家庄网站建立推广资源seo
  • 福州建设委员会网站拉新平台
  • 洛阳制作网站ihanshi搜索关键词是什么意思
  • xp系统做局域网内网站网络小说网站三巨头
  • 赣州网站建设流程武汉百度推广开户
  • 如何做外贸网站推广关键词排名优化
  • 淄博网络运营公司优化网站做什么的
  • 景德镇市建设局网站如何做好线上营销
  • 农安县建设局官方网站沈阳网站seo公司