正则表达式解平衡字符串

要求:

1.  字符串中所有的 a 或 b 个数 相同

2.  字符串的任意前缀(从字符串的头开始的子字符串)中 a 和 b 的个数之差不超过1

对于这样的问题,比较好的方法是一上来就写出几种情况来找规律

按要求,开头分为两种情况1) 以 a 开头 2)以 b 开头.这两种情况都是对称的,解决任意一个就可以解决整个问题

ps 根据第一条规则,整个字符串肯定为双数

若以 a 开头,则第二个字符只能为 b(若为 a 则违反了第二个规则)

ab

第三个字符可以为a 或 b,

1)若为 a:   aba

则第四个字符串肯定为 b :abab

2)若为 b

则第四个字符串肯定为a :abba

发现了什么么?我们发现以2为单位的子字符串中总是以 ab 或者 ba 出现的

这样这个问题就变成了: ab 或 ba 出现的字符串

答案为

^((ab)|(ba))*$

时间: 2024-11-06 13:31:24

正则表达式解平衡字符串的相关文章

正则表达式及R字符串处理之终结版

转载于: 正则表达式及R字符串处理之终结版 0.动机:为什么学习字符串处理 传统的统计学教育几乎没有告诉过我们,如何进行文本的统计建模分析.然而,我们日常生活中接触到的大部分数据都是以文本的形式存在.文本分析与挖掘在业界中也有着非常广泛的应用. 由于文本数据大多属于非结构化的数据,要想对文本数据进行传统的统计模型分析,必须要经过层层的数据清洗与整理. 今天我们要介绍的『正则表达式及R字符串处理』就是用来干这一种脏活累活的. 与建立酷炫的模型比起来,数据的清洗与整理似乎是一种低档次的工作.如果把建

用正则表达式分离C++字符串string

用正则表达式分离C++字符串string,写了一个小例子.#include "stdafx.h"#include <regex>  #include <string>#include <vector>#include <iostream>using namespace std; #define PATTERN "[\\S]+" //通过正则式pattern分割字符串void splitString( string st

Vim正则表达式匹配替换字符串

/********************************************************************** * Vim正则表达式匹配替换字符串 * 说明: * 用Vim用了几年了,平时也就替换字符串比较多,很少用正则表达式替换, * 今天在修改HTML文档的时候,不想一个一个去替换. * * 2018-6-1 深圳 宝安西乡 曾剑锋 ****************************************************************

正则表达式、原始字符串及re

正则表达式.原始字符串及re re是python中的一个文本解析工具,常用的方法有: 来源:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonre/index.html compile re.compile(pattern[, flags]) 把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用. re 所定义的 flag 包括: re.I 忽略大小写 re.L 表示特殊字符

[leetcode 周赛 159] 1234 替换子串等到平衡字符串

1234 Replace the Substring for Balanced String 替换子串等到平衡字符串 问题描述 有一个只含有 'Q', 'W', 'E', 'R' 四种字符,且长度为 n 的字符串. 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」. 给你一个这样的字符串 s,请通过「替换一个子串」的方式,使原字符串 s 变成一个「平衡字符串」. 你可以用和「待替换子串」长度相同的 任何 其他字符串来完成替换. 请返回待替换子串的最小可能长度. 如

PHP算法之分割平衡字符串

在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL", "RRLL", "RL", "RL", 每个子字符串中都包含相同数量的 'L' 和 'R'.示例 2: 输入:s = "RLLLLRR

1221. 分割平衡字符串

1221. 分割平衡字符串 描述: 在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL", "RRLL", "RL", "RL", 每个子字符串中都包含相同数量的 'L' 和 'R'.示例 2: 输入

leetcode 1221. 分割平衡字符串

在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL", "RRLL", "RL", "RL", 每个子字符串中都包含相同数量的 'L' 和 'R'.示例 2: 输入:s = "RLLLLRR

(正则表达式)linux shell 字符串操作(长度,查找,替换,匹配)详解

在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那