头脑风暴
Swap Adjacent in LR String
给定2个string, start and end, 只包含L, X, R char
可以replace "XL" with "LX", replace "RX" with "XR", 求问start 是否能transform成end string
一开始自然的想到了word ladder的思路,给定source and dest求问最短路径
暴力写了个BFS结果TLE了
start: "XXRXXXXXXXRXRXXXLXXLXXLXXXXXRXXXXXXXXLXX"
end: "XXXRXXXXRXXXXXXRXXXLXXXXXXXLXXLXXRXXLXXX"
然后就去Discuss里看了其它答案,发现这题是个数学推演题
since we can only move R to the right RX->XR, move L to the left, XL->LX L and R can never cross each other
just skip X character and compare position of L and R in 2 strings
for start[i] = end[j] = L, check i>=j, 因为 L只能左移
start[i] = end[j] = R, check i<=j, 因为R只能右移
转换成了two pointer
这里有个非常tricky的case
start:"XXRXLXRXXX"
end: "XXRLXXXXXR"
因为end的最后一个char是R, 但是start最后一个R之后还有一堆X, 所以不能简单的写while (p1 < n && p2 < n), 需要特殊处理p1==n和p2==n的情况
Last updated
Was this helpful?