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

被折叠的 条评论
为什么被折叠?



