作者:渴望力量的土狗
博客主頁:渴望力量的土狗的博客主頁
專欄:每日一道LeetCode
工欲善其事必先利其器,給大家介紹一款超牛的斬獲大廠offer利器——牛客網(wǎng)
點(diǎn)擊免費(fèi)注冊和我一起刷題吧
目錄
題目描述:在LR字符串中交換相鄰字符
解答思路:雙指針法
分析:
Java解題代碼:??
題目描述:在LR字符串中交換相鄰字符
在一個(gè)由 'L' , 'R' 和 'X' 三個(gè)字符組成的字符串(例如"RXXLRXRXL")中進(jìn)行移動操作。一次移動A操作指用一個(gè)"LX"替換一個(gè)"XL",或者用一個(gè)"XR"替換一個(gè)"RX"?,F(xiàn)給定起始字符串start和結(jié)束字符串end,請編寫代碼,當(dāng)且僅當(dāng)存在一系列移動操作使得start可以轉(zhuǎn)換成end時(shí), 返回True。
示例 :
輸入: start = "RXXLRXRXL", end = "XRLXXRRLX"
輸出: True
解釋:
我們可以通過以下幾步將start轉(zhuǎn)換成end:
RXXLRXRXL ->
XRXLRXRXL ->
XRLXRXRXL ->
XRLXXRRXL ->
XRLXXRRLX
提示:
1 <= len(start) = len(end) <= 10000
。
start
和end
中的字符串僅限于'L'
,?'R'
和'X'
。
解答思路:雙指針法
?這個(gè)題目說實(shí)話,會的是感覺真會,不會的是想破腦袋也解不出來(當(dāng)然還伴隨頭疼哈哈哈),我在拿到這個(gè)題目的時(shí)候想到了雙指針法,當(dāng)然,光是想到方法還不行,還必須實(shí)現(xiàn)出來(不瞞你們說,這題我解了將近1個(gè)小時(shí)哈哈哈)好,廢話不多說,開始我們的思路!
分析:
拿到題目時(shí),首先要明確我們的目標(biāo)-->用一系列操作使得start可以轉(zhuǎn)換成end時(shí), 返回True。
那么操作是什么呢?"LX"替換一個(gè)"XL",或者用一個(gè)"XR"替換一個(gè)"RX",看到這里我們還是一臉懵逼,別急,我們接著看這個(gè)操作的內(nèi)容,"LX"替換"XL"說明了什么?說明start中的L必須在對應(yīng)的end中L的右邊,那么"XR"替換"RX"是不是就說明了start中的R必須在end中R的左邊!!這樣思路就清晰一點(diǎn)。我們拿示例畫個(gè)草圖理解一下:
當(dāng)位置不對應(yīng)的時(shí)候,直接返回false,對應(yīng)的情況下我們就可以想到用雙指針來比較其位置,當(dāng)我們的兩個(gè)指針指向內(nèi)容都是R或者L的時(shí)候記錄其下標(biāo),然后進(jìn)行比較,比較什么?前面說過,start中的L位置必須比end的大,也就是假如我們定義i指針指向start。j指向end的時(shí)候,當(dāng)i指向的值是L的時(shí)候,i必須要大于j,否則返回false,同理,當(dāng)i指向的值是R的時(shí)候,i必須小于j,否則返回false。如果執(zhí)行跳出了循環(huán),則說明所有的條件都滿足了,返回true!解答完畢!,詳細(xì)情況請看解題代碼部分。文章來源:http://www.zghlxwxcb.cn/news/detail-811543.html
Java解題代碼:??
class Solution {
public boolean canTransform(String start, String end) {
int i=0;
int j=0;
int len=start.length();
//如果去掉所有X后不能相等就false
if(!start.replaceAll("X","").equals(end.replaceAll("X","")))
return false;
//相等之后判斷是否滿足條件
while(i<len&&j<len){
while(i<len&&start.charAt(i)=='X'){
i++;
}
while(j<len&&end.charAt(j)=='X'){
j++;
}
//進(jìn)行判斷,如果是L,則i必須>j
//如果是R,則i必須小于j
if(i<len&&j<len&&start.charAt(i)=='L'&&i<j){
return false;
}
if(i<len&&j<len&&start.charAt(i)=='R'&&i>j){
return false;
}
i++;
j++;
}
return true;
}
}
?“ 本期的分享就到這里了,?記得給博主一個(gè)三連哈,你的支持是我創(chuàng)作的最大動力!???文章來源地址http://www.zghlxwxcb.cn/news/detail-811543.html
到了這里,關(guān)于LeetCode競賽題目—在LR字符串中交換相鄰字符的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!