777.在LR字符串中交换相邻字符

在一个由 ‘L‘ , ‘R‘ 和 ‘X‘ 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。

示例 :

输入:

start = "RXXLRXRXL",

end = "XRLXXRRLX"

输出: True

解释:

我们可以通过以下几步将start转换成end:

RXXLRXRXL ->

XRXLRXRXL ->

XRLXRXRXL ->

XRLXXRRXL ->

XRLXXRRLX

注意:

1 <= len(start) = len(end) <= 10000。 start和end中的字符串仅限于‘L‘, ‘R‘和‘X‘。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-adjacent-in-lr-string 著作权归领扣网络所有。

 1     public boolean canTransform(String start, String end) {
 2         int len = start.length(),i=0,j=0;
 3
 4         while(i< len && j < len){
 5         //第一步:start 和 end 都跳过左边的‘X‘
 6             while(i < len && start.charAt(i) == ‘X‘){
 7                 i++;
 8             }
 9             while(j < len && end.charAt(j) == ‘X‘){
10                 j++;
11             }
12             if(i == len && j == len) return true;  //XXLXXXX->XXLXXXX
13             if(i == len || j == len) return false;  //X->R
14
15         //第二步:查看当前两个指针指向的字符是否一样,不一样说明无法通过题意的移动方式转变为相同的字符串
16             if(i < len && j < len && start.charAt(i) != end.charAt(j)){
17                 return false;
18             }
19         //经过以上操作有:start[i] == end[j] 为‘R’或者‘L’
20         //第三步:检查此时start和end中‘R‘左边的‘X‘的个数,如果前者大于后者,那不能成功。
21         //为什么呢?因为按题意‘R‘只能向右移动,且移动时‘X‘会向左移,即‘R’左边的‘X’只会变多
22         //如果start中‘R’左边的‘X’都比end中的多,那再怎么移动,也不能使start中‘R’左边的‘X’个数等于end中的
23
24             if(i < len && j < len && start.charAt(i) == ‘R‘ && i > j) return false;
25
26         //第四步:同理,检查此时start和end中‘L‘左边的‘X‘的个数,如果后者大于前者,那不能成功。
27         //因为‘L’只能向左移动,如果start中‘L’左边的‘X’个数比end中‘L’左边的少,那么start中移动‘L’
28         //只会让这个数更少
29
30             if(i < len && j < len && start.charAt(i) == ‘L‘ && i < j) return false;
31
32         //第五步:检查完都进入下一步
33             i++;
34             j++;
35         }
36         return true;
37     }

原文地址:https://www.cnblogs.com/blog-of-zxf/p/11332420.html

时间: 2024-07-31 00:54:28

777.在LR字符串中交换相邻字符的相关文章

[Swift]LeetCode777. 在LR字符串中交换相邻字符 | Swap Adjacent in LR String

In a string composed of 'L', 'R', and 'X'characters, like "RXXLRXRXL", a move consists of either replacing one occurrence of "XL" with "LX", or replacing one occurrence of "RX" with "XR". Given the startin

转:假设有一个字符串aabcad,请编写一段程序,去掉字符串中不相邻的重复字符。

假设有一个字符串aabcad,请编写一段程序,去掉字符串中不相邻的重复字符.即上述字串处理之后结果是为:aabcd; 分析,重点考查 char 与int 的隐式转换.程序如下: -(void) removeRepeat:(NSString *)aNum { NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:10]; for(int i = 0; i<aNum.length; i++) { [mArr addObject:

双指针---反转字符串中的元音字符

反转字符串中的元音字符 345. Reverse Vowels of a String (Easy) Given s = "leetcode", return "leotcede" 题目描述: ??给定一个字符串,将字符串中的元音字母交换,返回交换后的字符串. 思路分析: ??使用双指针指向待反转的两个元音字符,一个指针从头向尾进行遍历,一个指针从尾到头遍历. 代码: private final static HashSet<Character>vowe

css如何设置字符串中第一个字符的样式

css如何设置字符串中第一个字符的样式:本章节介绍一下如何使用css设置字符串中第一个字符的样式.以前我们实现此效果的方式,可能会在第一个字符上嵌套上一个span标签.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/"

Java 求字符串中出现频率最高字符

前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下. import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /* * 查找字符串中出现频率最高的字符 * * 主要思路:先将字符

*字符串-01. 在字符串中查找指定字符

1 /* 2 * Main.c 3 * D1-字符串-01. 在字符串中查找指定字符 4 * Created on: 2014年8月18日 5 * Author: Boomkeeper 6 *****部分通过****** 7 */ 8 9 #include <stdio.h> 10 11 int mysearch(char ch, const char str[], int length) { 12 13 int j, ret = -1; 14 15 for (j = 0; j < le

JavaScript替换字符串中最后一个字符

1.问题背景 在一个输入框中,限制字符串长度为12位.利用键盘输入一个数字,会将字符串中最后一位替换,比方:111111111111.再输入一个3,会显示111111111113 2.详细实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html x

[算法]删除字符串中重复的字符

如何删除字符串中重复的字符 问题描述: 删除字符串中重复的字符,例如,"good"去掉重复的字符串后就变成"god". 第一种方法: "蛮力法",最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为'\0',最后再把这个字符数组中所有的'\0'去掉,此时得到的字符串就是删除重复字符后的目标字符串. 代码如下: package 删除字符串中重复的字符; public class Solu

JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符

package com.pb.demo.packclass.demo1; import java.util.HashSet; /** * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符 例如: 原始字符串是"abc",打印得到下列所有组合情况 "a" "b" "c" "ab" "bc" "ca" "ba" "cb"