A-Strong Password(字符串 构造 贪心)
题意
给定一个由小写字母组成的字符串密码,定义一个密码的复杂度(输入时间):第一个字母需要两秒,其他字母如果与前一个字母相同,需要1秒,否则需要2秒,现在要求在字符串中插入任意一个小写字母使得输入时间最大(这里的better翻译错误,翻译为了最短时间),输出插入后的字符串
思路
直接从左往右遍历,直到找到两个连续相同的字母,在中间插入一个不同的字母即可,如果没有则加在字符串末尾,与字符串末尾的字母不同
代码
#include <iostream>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <cmath>
#include <vector>
#include <stack>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;//开long long,求求你了,记得开long long
const LL N=1e5+10;
const LL INF=1e18;
const double small=1e-16;
//千万不要用puts()和gets(),求求你了
void solve()
{
string s;
cin>>s;
int n=s.size();
bool flag=false;
if(n==1)
{
if(s[0]=='a')cout<<"ab"<<endl;
else cout<<s[0]<<(char)(s[0]-1)<<endl;//这里有个坑:char减去1会被转化为int类型,需要转化回来
return;
}
for(int i=0;i<s.size()-1;i++)
{
cout<<s[i];
if(s[i]==s[i+1]&&flag==false)
{
flag=true;
char tmp=s[i];
if(tmp=='a')tmp++;
else tmp--;
cout<<tmp;
flag=true;
}
}
cout<<s[s.size()-1];
if(!flag)
{
char tmp=s[s.size()-1];
i