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

如何做seo整站优化效果好的网站制作公司

如何做seo整站优化,效果好的网站制作公司,学校网站建设工作总结,网站建设开发管理 总结2024.1.29 题目来源我的题解方法一 动态规划 题目来源 力扣每日一题;题序:514 我的题解 方法一 动态规划 定义 dp[i][j] 表示从前往后拼写出 key的第 i个字符, ring 的第 j个字符与 12:00 方向对齐的最少步数(下标均从 0 开始&…

2024.1.29

      • 题目来源
      • 我的题解
        • 方法一 动态规划

题目来源

力扣每日一题;题序:514

我的题解

方法一 动态规划

定义 dp[i][j] 表示从前往后拼写出 key的第 i个字符, ring 的第 j个字符与 12:00 方向对齐的最少步数(下标均从 0 开始)。
显然,只有当字符串 ring 的第 j个字符需要和 key 的第 i 个字符相同时才能拼写出 key 的第 i 个字符,因此对于 key 的第 i个字符,需要考虑计算的 ring 的第 j 个字符只有 key[i] 在 ring 中出现的下标集合。对每个字符维护一个位置数组 pos[i],表示字符 ii在 ring 中出现的位置集合,用来加速计算转移的过程。
对于状态 dp[i][j],需要枚举上一次与 12:00 方向对齐的位置 k,因此可以列出如下的转移方程:
dp [ i ] [ j ] = min ⁡ k ∈ p o s [ k e y [ i − 1 ] ] { d p [ i − 1 ] [ k ] + min ⁡ { abs ( j − k ) , n − abs ( j − k ) } } \textit{dp}[i][j]=\min_{k \in pos[key[i-1]]}\{dp[i-1][k]+\min\{\text{abs}(j-k),n-\text{abs}(j-k)\}\} dp[i][j]=minkpos[key[i1]]{dp[i1][k]+min{abs(jk),nabs(jk)}}
其中 min ⁡ { abs ( j − k ) , n − abs ( j − k ) } \min\{\text{abs}(j-k),n-\text{abs}(j-k)\} min{abs(jk),nabs(jk)} 表示在当前第 k 个字符与 12:00方向对齐时第 j 个字符旋转到 12:00 方向并按下拼写的最少步数。
最后答案即为 min ⁡ i = 0 n − 1 { dp [ m − 1 ] [ i ] } + m \min_{i=0}^{n-1}\{\textit{dp}[m-1][i]\}+m mini=0n1{dp[m1][i]}+m

时间复杂度: O( m n 2 mn^2 mn2)
空间复杂度: O(mn)

public int findRotateSteps(String ring, String key) {int n = ring.length(), m = key.length();//存储每个字符所在的位置List<Integer>[] pos = new List[26];for (int i = 0; i < 26; ++i) {pos[i] = new ArrayList<Integer>();}for (int i = 0; i < n; ++i) {pos[ring.charAt(i) - 'a'].add(i);}int[][] dp = new int[m][n];for (int i = 0; i < m; ++i) {Arrays.fill(dp[i], Integer.MAX_VALUE);}for (int i : pos[key.charAt(0) - 'a']) {dp[0][i] = Math.min(i, n - i);}for (int i = 1; i < m; ++i) {for (int j : pos[key.charAt(i) - 'a']) {for (int k : pos[key.charAt(i - 1) - 'a']) {dp[i][j] = Math.min(dp[i][j], dp[i - 1][k] + Math.min(Math.abs(j - k), n - Math.abs(j - k)));}}}return Arrays.stream(dp[m - 1]).min().getAsInt()+m;}
//优化空间版本
// 考虑到每次转移状态 dp[i][] 只会从 dp[i−1][] 转移过来,因此可以利用滚动数组优化第一维的空间复杂度public int findRotateSteps(String ring, String key) {int n = ring.length(), m = key.length();List<Integer>[] pos = new List[26];for (int i = 0; i < 26; ++i) {pos[i] = new ArrayList<Integer>();}for (int i = 0; i < n; ++i) {pos[ring.charAt(i) - 'a'].add(i);}//空间优化,dp[]int[] dp = new int[n];for (int i : pos[key.charAt(0) - 'a']) dp[i] = Math.min(i, n - i);for (int i = 1; i < m; ++i) {//若当前与上一次相同则不需要转动ringif(key.charAt(i)==key.charAt(i-1))continue;for (int j : pos[key.charAt(i) - 'a']) {dp[j]=Integer.MAX_VALUE;for (int k : pos[key.charAt(i - 1) - 'a']) {dp[j] = Math.min(dp[j], dp[k] + Math.min(Math.abs(j - k), n - Math.abs(j - k)));}}}return pos[key.charAt(m - 1) - 'a'].stream().mapToInt(i -> dp[i]).min().orElse(Integer.MAX_VALUE)+m;}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

http://www.yayakq.cn/news/757537/

相关文章:

  • 高端品牌网站建设的目的巩义网站建设与制作
  • 网站建设的主流架构有哪些可以做微网站的第三方平台
  • 海淀教育互动平台网站建设时间计算器久久网
  • 建瓯市建设局网站软件外包公司介绍
  • 天津建网站的公司123建站
  • 深圳市新朗建设工程有限公司网站做网站云服务器还是云虚拟主机
  • 石龙镇住房规划建设局网站linux 好用的wordpress
  • 网站 白名单网上注册公司流程和方法
  • 宜昌市住房和城乡建设局网站服务主机网络服务
  • 食品网站模板免费h5页面制作软件app
  • 爱站seo工具包官网所有代刷平台推广
  • 网站建设属于那个科目昆明网站建设去出发科技公司
  • phpcms 网站 关闭wordpress长图拼接
  • 同一个网站绑定多个域名手机上怎么创建wordpress
  • 成都家具企业网站建设网站静态路径
  • 天津网站制作首页在线咨询网站漏洞解决
  • 做淘客网站注意事项网站一般几年
  • 网络广告投放方案外贸网站如何做seo
  • 在百度云上做网站易语言可以做网站后端
  • 教你做文案的网站推荐中山网站建设如何
  • 金华网站制作系统中国能源建设集团网站群
  • 网站性能建设开发网站
  • 甘肃新闻seo翻译
  • 搭建网站挣钱中国建设银行官企业网站
  • 百度网站html验证做推广什么网站便宜
  • joomla可以做预订类网站吗wordpress外贸 模板
  • 商城网站 模板珠海seo网站建设
  • 论坛网站建设规划书唐山网站设计
  • 多语言网站建设费用服务器创建网站
  • 怎么让WORDPRESS首页显示菜单郑州做网站优化最好的公司