做網(wǎng)站的屬于什么崗位網(wǎng)上推廣賺錢方法
目錄鏈接:
力扣編程題-解法匯總_分享+記錄-CSDN博客
GitHub同步刷題項(xiàng)目:
https://github.com/September26/java-algorithms
原題鏈接:力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長(zhǎng)平臺(tái)
描述:
給你兩個(gè)字符串?start
?和?target
?,長(zhǎng)度均為?n
?。每個(gè)字符串?僅?由字符?'L'
、'R'
?和?'_'
?組成,其中:
- 字符?
'L'
?和?'R'
?表示片段,其中片段?'L'
?只有在其左側(cè)直接存在一個(gè)?空位?時(shí)才能向?左?移動(dòng),而片段?'R'
?只有在其右側(cè)直接存在一個(gè)?空位?時(shí)才能向?右?移動(dòng)。 - 字符?
'_'
?表示可以被?任意?'L'
?或?'R'
?片段占據(jù)的空位。
如果在移動(dòng)字符串?start
?中的片段任意次之后可以得到字符串?target
?,返回?true
?;否則,返回?false
?。
示例 1:
輸入:start = "_L__R__R_", target = "L______RR" 輸出:true 解釋:可以從字符串 start 獲得 target ,需要進(jìn)行下面的移動(dòng): - 將第一個(gè)片段向左移動(dòng)一步,字符串現(xiàn)在變?yōu)?"L___R__R_" 。 - 將最后一個(gè)片段向右移動(dòng)一步,字符串現(xiàn)在變?yōu)?"L___R___R" 。 - 將第二個(gè)片段向右移動(dòng)散步,字符串現(xiàn)在變?yōu)?"L______RR" 。 可以從字符串 start 得到 target ,所以返回 true 。
示例 2:
輸入:start = "R_L_", target = "__LR" 輸出:false 解釋:字符串 start 中的 'R' 片段可以向右移動(dòng)一步得到 "_RL_" 。 但是,在這一步之后,不存在可以移動(dòng)的片段,所以無法從字符串 start 得到 target 。
示例 3:
輸入:start = "_R", target = "R_" 輸出:false 解釋:字符串 start 中的片段只能向右移動(dòng),所以無法從字符串 start 得到 target 。
提示:
n == start.length == target.length
1 <= n <= 105
start
?和?target
?由字符?'L'
、'R'
?和?'_'
?組成
解題思路:
* 解題思路:
* 找到字符串,每個(gè)位置上的字符按照下面的規(guī)則來判斷即可。
* 1.順序一樣
* 2.L左側(cè)空格的數(shù)目,start要大于target
* 3.R右側(cè)空格的數(shù)組,target要大于start
代碼:
class Solution2337
{
public:vector<pair<char, int>> makePiarList(string s){vector<pair<char, int>> v;int blankNum = 0;int index = 0;while (index < s.length()){if (s[index] == '_'){blankNum++;}else if (s[index] == 'L'){v.push_back(make_pair('L', blankNum));}else{v.push_back(make_pair('R', blankNum));}index++;}return v;}bool canChange(string start, string target){vector<pair<char, int>> startList = makePiarList(start);vector<pair<char, int>> targetList = makePiarList(target);if (startList.size() != targetList.size()){return false;}if (startList.size() == 0){return true;}// start中總的空格數(shù)量int startBlankSum = startList[startList.size() - 1].second;// target中總的空格數(shù)量int targetBlankSum = startList[startList.size() - 1].second;for (int i = 0; i < startList.size(); i++){// 順序應(yīng)該一致if (startList[i].first != targetList[i].first){return false;}if (startList[i].first == 'L'){if (startList[i].second < targetList[i].second){return false;}continue;}if (startList[i].first == 'R'){if (startBlankSum - startList[i].second < targetBlankSum - targetList[i].second){return false;}continue;}}return true;}
};