C ++中没有AAA或BBB的字符串
假设我们有两个整数A和B,我们必须返回任何字符串S,这样-
S的长度为A+B,并且正好包含A个字母“a”和B个“b”个字母。
子字符串“aaa”和“bbb”将不在字符串S中
因此,如果给定的整数为A=4,B=1,则结果将为“aabaa”。
为了解决这个问题,我们将遵循以下步骤-
定义字符串ret,最初为空
|A–B|>=2
ret:=ret连接'bb'
将B减少2
如果A为非零值,则将'a'与ret连接,并将A减1
ret:=ret连接'aa'
将A减少2
如果B为非零,则将'b'与ret连接,并将B减1
如果A>B,则
其他
而A为非零或B为非零
ret:=ret+'a',A减1
如果B不为零
否则重新组合'b',将B减1,如果A不为0,则将a与ret组合,并将A减1
ret:=ret连接'b',将B减1
如果A为非零且(ret的大小<2或不是(ret的大小>=2并且ret的最后一个元素=ret的倒数第二个元素)和ret的最后一个元素为'a'),则
返回ret
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string strWithout3a3b(int A, int B) {
string ret = "";
while(abs(A - B) >= 2){
if(A > B){
ret += 'a';
ret += 'a';
A -= 2;
if(B) {
ret += 'b';
B--;
}
}else{
ret += 'b';
ret += 'b';
B -= 2;
if(A) {
ret += 'a';
A--;
}
}
}
while(A || B){
if(A && (ret.size() < 2 || !(ret.size() >= 2 && ret[ret.size() - 1] == ret[ret.size() - 2] && ret[ret.size() - 1] == 'a') ) ){
ret += 'a';
A--;
if(B) {
ret += 'b';
B--;
}
}else{
ret += 'b';
B--;
if(A) {
ret += 'a';
A--;
}
}
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.strWithout3a3b(4, 1));
}输入值
4 1
输出结果
"aabaa"