不含 AAA 或 BBB 的字符串

2024-03-20 11:38
文章标签 字符串 aaa bbb

本文主要是介绍不含 AAA 或 BBB 的字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。

在此过程之后,我们得到一些数组 B

返回 B 的最大值和 B 的最小值之间可能存在的最小差值。

示例 1:

输入:A = [1], K = 0
输出:0
解释:B = [1]

思路1:先将字符串全部置为“aaaa...” 或 "bbbbb..." ,再查找连续的"aaa"或"bbb",并将连续的进行修改。

	 public String strWithout3a3b(int A, int B) {StringBuilder sBuilder = new StringBuilder();int temp = 0;char longer = A >= B ? 'a' : 'b'; // 较长的子串char shorter = A < B ? 'a' : 'b'; // 较短的子串int shortLen = A < B ?  A : B; // 较短子串长度// 先将子串全部变成较长子串int total = A + B;while (total > 0){sBuilder.append(longer);total--;}char[] array = sBuilder.toString().toCharArray();String subStr = new StringBuilder().append(longer).append(longer).append(longer).toString();int k = array.length-1; // 最后一个字符的位置int lastIdx = 0;// 查找连续子串while (shortLen != 0){int idx = sBuilder.toString().indexOf(subStr, lastIdx);lastIdx = idx + 3;// 找到连续的aaaif (idx != -1){array[idx+2] = shorter;shortLen--;}else{// 找到第一个不是shorter的位置while (array[k] == shorter){k--;}array[k] = shorter;k--;shortLen--;}}return new String(array);}

思路2:贪心策略。

	 public String strWithout3a3b(int A, int B){StringBuilder ans = new StringBuilder();int L = 0; boolean writeA = false;while (A > 0 || B > 0){writeA = false; // 是否写'a'L = ans.length();// 先写'a'的条件(贪心策略)if (L >= 2 && (ans.charAt(L-1) == ans.charAt(L-2)))  // 连续两个字符相同{if (ans.charAt(L-1) == 'b')// 末尾是'bb'writeA = true;}else{if ( A >= B) // 先写较长的字符writeA = true;}// 开始写'a'或写'b'if (writeA){A--;ans.append('a');}else{B--;ans.append('b');}}return ans.toString();}

 

这篇关于不含 AAA 或 BBB 的字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829335

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用