Re: [閒聊] 每日leetcode

看板Marginalman作者時間2周前 (2024/04/27 13:05), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串166/223 (看更多)
514. Freedom Trail 今天又是Hard,這題應該也是dp 因為同一個字母可以出現多次,不同組合轉的次數會不同,要去找最小的次數 只要知道index就可以算出step,用一個hashtable去存每個字母的index class Solution { public: int findRotateSteps(string ring, string key) { int len = ring.size(); vector<vector<int>> v(26); vector<int> steps(len); for(int i = 0; i < ring.size(); i++){ v[ring[i] - 'a'].push_back(i); } char prev = key[0]; for(int i : v[key[0] - 'a']) { steps[i] = min(i, len - i) + 1; } for(int n = 1; n < key.size(); n++){ for(int i : v[key[n] - 'a']){ int step = INT_MAX; for(int j : v[prev - 'a']) { step = min(step, steps[j] + min(abs(i - j), len - abs(i - j) )); } steps[i] = step + 1; } prev = key[n]; } int ans = INT_MAX; for(int i : v[prev - 'a']) { ans = min(ans, steps[i]); } return ans; } }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.10.251 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1714194346.A.0A6.html
文章代碼(AID): #1cB8Ug2c (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1cB8Ug2c (Marginalman)