ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

514. 自由之路

2021-10-23 12:01:39  阅读:126  来源: 互联网

标签:const res 自由 key return ring 514 indexMap


举例:
输入: ring = "godding", key = "gd"
输出: 4
/**
 * @param {string} ring
 * @param {string} key
 * @return {number}
 */
var findRotateSteps = function(ring, key) {
	// 存储 ring 中每个字母出现的 index
	/*{g: [0], o: [1], d: [2, 3], ...}
	*/
    const indexMap = {}
    for(let i = 0; i < ring.length; i++){
        const c = ring[i]
        if(indexMap[c]){
            indexMap[c].push(i)
        }else{
            indexMap[c] = [i]
        }
    }
    const map = new Map()  // 记忆化
    function dfs(ringIndex, keyIndex){
        const haha = ringIndex * 10000 + keyIndex
        if(map.has(haha)){
        	// 有就直接用
            return map.get(haha)
        }
        // 全都匹配完了
        if(keyIndex === key.length){
            return 0
        }
        const current = key[keyIndex] // 当前要匹配的字母
        let res = Infinity
        for(let item of indexMap[current]){ // 遍历该字母在 ring 中的所有位置
        	// 顺时针和逆时针转动的距离中较小的
            const d1 = Math.abs(item - ringIndex) 
            const d2 = ring.length - d1
            const currentMin = Math.min(d1, d2)
            // 下一次递归 
            res = Math.min(res, currentMin + dfs(item, keyIndex + 1))
        }
        map.set(haha, res)
        return res
    }
   return  dfs(0, 0) + key.length
};


标签:const,res,自由,key,return,ring,514,indexMap
来源: https://blog.csdn.net/bao__zao/article/details/120918974

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有