2020-01-12 18:28:13

问题描述

问题求解

本题还是非常困难的,至少我在看到这个题目的时候是没有想到怎么解决的。我当时联想到的题目是那条grid走两遍的题目,那条题目也很麻烦,使用的是dp。

本题最难的地方在于如何定义状态,其实本题可以看作是个路径规划问题,所以状态就是左指在的位置和右指在位置以及当前的字符位置。

之后递归去遍历解空间即可。

    int[][][] dp = new int[27][27][301];

    public int minimumDistance(String word) {
return dfs(word, 0, 0, 0);
} private int dfs(String word, int start, int l, int r) {
if (start >= word.length()) return 0;
if (dp[l][r][start] != 0) return dp[l][r][start];
int idx = word.charAt(start) - 'A' + 1;
dp[l][r][start] = Math.min(dist(l, idx) + dfs(word, start + 1, idx, r), dist(r, idx) + dfs(word, start + 1, l, idx));
return dp[l][r][start];
} private int dist(int from, int to) {
if (from == 0) return 0;
int x1 = (from - 1) / 6;
int y1 = (from - 1) % 6;
int x2 = (to - 1) / 6;
int y2 = (to - 1) % 6;
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}

  

  

最新文章

  1. iOS开发 - OC - 实现本地数据存储的几种方式一
  2. Bean
  3. Lighttpd虚拟主机和多域名的配置
  4. JavaScript执行bat文件清理浏览器缓存
  5. Day1 三级目录
  6. 如何设置NBU的Backup, Archive and Restore
  7. OneProxy主从延迟检测
  8. JQuery Selectors 方法说明
  9. oracle数据库创建表空间和表临时空间
  10. 典当行以及海尔java小节
  11. Cracking the coding interview--Q1.8
  12. Git入门——基础知识问答
  13. C++ 前置声明 和 包含头文件 如何选择
  14. ISO C Random Number Functions
  15. Fiddler抓取https原理?
  16. JQuery版评分控件
  17. winfrom中将panel另存为图片
  18. 第三章Hibernate关联映射
  19. ubuntu 修改系统时间无效
  20. 转://oracle Wallet在expdp/impdp中使用场景

热门文章

  1. ndk-stack使用方法(转)
  2. 关于struct stat
  3. ThinkPHP判断更新是否成功的正确方法
  4. Kubernetes搭建过程中使用k8s.gcr.io、quay.io、docker.io的镜像加速
  5. web系统是否要前后端分离?
  6. XML转换
  7. JS逆向某网站登录密码分析
  8. Linux永久开放端口
  9. Python——五分钟带你弄懂迭代器与生成器,夯实代码能力
  10. sentinel 规则持久化到nacos