国美在线网站建设,网站二级页面设计要求,网页的开发流程,手机浏览器下载网页视频目录
2337. 移动片段得到字符串
题目描述#xff1a;
实现代码与解析#xff1a;
双指针
原理思路#xff1a; 2337. 移动片段得到字符串
题目描述#xff1a; 给你两个字符串 start 和 target #xff0c;长度均为 n 。每个字符串 仅 由字符 L、R 和 _ 组成#x…目录
2337. 移动片段得到字符串
题目描述
实现代码与解析
双指针
原理思路 2337. 移动片段得到字符串
题目描述 给你两个字符串 start 和 target 长度均为 n 。每个字符串 仅 由字符 L、R 和 _ 组成其中
字符 L 和 R 表示片段其中片段 L 只有在其左侧直接存在一个 空位 时才能向 左 移动而片段 R 只有在其右侧直接存在一个 空位 时才能向 右 移动。字符 _ 表示可以被 任意 L 或 R 片段占据的空位。
如果在移动字符串 start 中的片段任意次之后可以得到字符串 target 返回 true 否则返回 false 。
示例 1
输入start _L__R__R_, target L______RR
输出true
解释可以从字符串 start 获得 target 需要进行下面的移动
- 将第一个片段向左移动一步字符串现在变为 L___R__R_ 。
- 将最后一个片段向右移动一步字符串现在变为 L___R___R 。
- 将第二个片段向右移动散步字符串现在变为 L______RR 。
可以从字符串 start 得到 target 所以返回 true 。示例 2
输入start R_L_, target __LR
输出false
解释字符串 start 中的 R 片段可以向右移动一步得到 _RL_ 。
但是在这一步之后不存在可以移动的片段所以无法从字符串 start 得到 target 。示例 3
输入start _R, target R_
输出false
解释字符串 start 中的片段只能向右移动所以无法从字符串 start 得到 target 。提示
n start.length target.length1 n 105start 和 target 由字符 L、R 和 _ 组成
实现代码与解析
双指针
class Solution {
public:bool canChange(string start, string target) {int count1 0; // 记录两个字符串字母长度int count2 0;for (int i 0, j 0; i start.size() || j target.size(); ){while (target[j] _) j;while (start[i] _) i;if (isalpha(target[j])) count1;if (isalpha(start[i])) count2;if (start[i] ! target[j]) return false; // 不相等if (target[j] L i j) return false; // 在左侧if (target[j] R i j) return false; // 在右侧i;j;}if (count1 ! count2) return false;return true; }
};
原理思路 知道什么时候不成立就很好写了L只能向左移动R只能向右移动所以我们同时遍历start与target若对应字母不相同直接返回false若相同为Li ji 只能向左移动不能向右所以小于时肯定false同理为R时i j返回false。 还有测试样例中最后一个两个字符串中的字母个数不相同count记录判断一下即可。