关于字符串覆盖问题的解答。

本文探讨了在VC++环境中遇到的一个字符串处理问题,代码旨在找出最短的覆盖字符串。作者分享了遇到的问题:代码在本地运行正确,但在提交时出现错误。文中展示了详细的代码实现,包括针对不同情况的字符串替换逻辑,并寻求社区的帮助进行问题诊断。

为什么我的在vc++中能运行正确,为什么一提交就错了呢?

哪位大神来看看指点一下下啊

代码如下:

#include<iostream>
using namespace std;


int minLength(const char *s){
//由于字符串只由字符a,b,c组成,
//将其每三个分为一组,每次循环只代替一次
//少于三个的特殊处理
int length=0;//s指向数组的长度
while(s[length])length++;

if(length==0) cout<<"数组长度不能为0!";
//if(length==1||length==2)return 1;
char b[100]="000000000";
int i=0,t=0,k=0,flag=0;
while(true){
i=0; t=0;char a[10]="000000000";
if(length==1)return 1;
if(length==2){
if(s[i]==s[i+1])
return 2;
else return 1;
}

while(s[i]==s[i+1]&&s[i]==s[i+2]){
a[i]=s[i];
i++;
}
if(i==length-2) {k=length; break;}
//每组中有两个字符相同,形如aab
if(s[i]==s[i+1]&&s[i]!=s[i+2])flag=1;
//每每组中有两个字符相同,形如aba,baa
if(s[i]!=s[i+1]&&s[i]==s[i+2]||s[i]!=s[i+1]&&s[i+1]==s[i+2])flag=2;
//每组字符都不相同
if(s[i]!=s[i+1]&&s[i]!=s[i+2]&&s[i+1]!=s[i+2])flag=3;


switch(flag){
case 1:
//判断s[i]是哪个字符
//确定字符,并用不同的字符替换相邻两个字符
if(abs(s[i+2]-s[i])==2){
a[i]=s[i];
a[i+1]='b';
for(i=i+2;i<length-1;i++)a[i]=s[i+1];
length--;
}else{if(s[i]=='a'&&s[i+2]=='b'||s[i]=='b'&&s[i+2]=='a'){
a[i]=s[i];
a[i+1]='c';
for(i=i+2;i<length-1;i++)a[i]=s[i+1];length--;}
else{a[i]=s[i];
a[i+1]='a';
for(i=i+2;i<length-1;i++)a[i]=s[i+1];length--;}
}
for(t;t<i;t++)b[t]=a[t];
s=b;
break;
case 2:
if(abs(s[i+1]-s[i])==2){
a[i]='b';
for(i=i+1;i<length-1;i++)a[i]=s[i+1];length--;
}else{if(s[i]=='a'&&s[i+1]=='b'||s[i]=='b'&&s[i+1]=='a'){
a[i]='c';
for(i=i+1;i<length-1;i++)a[i]=s[i+1];length--;}
else{a[i]='a';
for(i=i+1;i<length-1;i++)a[i]=s[i+1];length--;}
}
for(t;t<i;t++)b[t]=a[t];
s=b;
break;
case 3:
a[i]=s[i+2];
for(i=i+1;i<length-1;i++)a[i]=s[i+1];
length--;
for(t;t<i;t++)b[t]=a[t];
s=b;
break;
default:
break;
}
}
return k;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值