# 2337. Move Pieces to Obtain a String [2337. Move Pieces to Obtain a String](https://leetcode.com/problems/move-pieces-to-obtain-a-string/) (<font color="#FFB800"> Medium</font> 通過率: 55.6%) ## 限制條件 <ul> <li>n == start.length == target.length</li> <li>1 <= n <= 10^5</li> <li>start and target consist of the characters 'L', 'R', and '_'.</li> </ul> ### 解法 1 我的解法是先把兩個字串先記錄起來,並且記錄位置,接著再依照兩字串有沒有不一樣先篩選,再來就是如果L和R的位置不對,也步行的方式作為結果。 不過看起來解出來的複雜度很高而且記憶體的用量很大... - 時間複雜度: O(n) - 空間複雜度: O(n) ```cpp!= class Solution { public: bool canChange(string start, string target) { string startRecord, targetRecord; vector<int> startPosition, targetPosition; for (int i = 0; i < start.size(); i++) { if (start[i] != '_') { startRecord.push_back(start[i]); startPosition.push_back(i); } } for (int i = 0; i < target.size(); i++) { if (target[i] != '_') { targetRecord.push_back(target[i]); targetPosition.push_back(i); } } if (startRecord != targetRecord) return false; for (int i = 0; i < targetRecord.size(); i++) { if ((targetRecord[i] == 'L') && (startPosition[i] < targetPosition[i])) return false; if ((targetRecord[i] == 'R') && (startPosition[i] > targetPosition[i])) return false; } return true; } }; ``` </int>