1. 程式人生 > >CSDN編程挑戰——《交替字符串》

CSDN編程挑戰——《交替字符串》

right top ber col sdn main 生成 || lin

交替字符串

題目詳情:

假設字符串str3可以由str1和str2中的字符按順序交替形成,那麽稱str3為str1和str2的交替字符串。比如str1="abc",str2="def"。那麽"adbecf", "abcdef", "abdecf", "abcdef", "adefbc"等等都為str1和str2的交替字符串。更形式化的。str3的生成算法例如以下:

str3=""

while str1不為空 or str2不為空:

把str1或str2的首字符增加到str3,並從str1或str2中刪除對應的字符

end

給定str1, str2,和str3。推斷str3是否為str1和str2的交替字符串。


輸入格式:

多組數據,每組數據三行,各自是str1,str2,str3。str1,str2的長度在[1..100]範圍內,str3的範圍在[1..200]範圍內。字符串僅僅包括小寫英文字母。

輸出格式:

每組數據輸出一行YES或者NO。

答題說明:

輸入例子

a

b

ab

a

b

ca

輸出例子:

YES

NO


欠缺考慮(Error):

#include "stdio.h"
#include "string.h"
#define maxn 100+2
 
char str1[maxn],str2[maxn],str3[maxn*2];
 
int fun()
{
	int i1=0,size1=strlen(str1);
	int i2=0,size2=strlen(str2);
	int i3=0,size3=strlen(str3);

	//通過 str1和str2 順序匹配 str3 ,匹配不到 return 0 
	while(i3<size3){
		if(i1<size1 && str3[i3]==str1[i1]){
			i1++;
		}else if(i2<size2 && str3[i3]==str2[i2]){
			i2++;
		}else {
			return 0;
		}
		i3++;
	}
	
	return 1;
}

int main()
{
	while(scanf("%s%s%s",str1,str2,str3))
	{
		if(strlen(str1)+strlen(str2)==strlen(str3) && fun()){
			printf("YES\n");
		}else{
			printf("NO\n");
		}
	}
	
	return 0;
} 
/*
	不通過的測試用例:
		12345	6278	162782345 
	
	錯誤原因:
		通過 str1和str2 按順序進行匹配 str3 。此程序的錯就錯在匹配這。
		
		即 str1和str2 對(str3中)某一個字符同一時候能夠匹配時沒有進行選
		
		擇而是簡單的用 str1中的字符去匹配 
*/ 

改動後(AC):

#include "stdio.h"
#include "string.h"
#define maxn 100+2
 
char str1[maxn],str2[maxn],str3[maxn*2];
 
int fun(int i1,int i2,int i3)
{	
	if(i1>strlen(str1) || i2>strlen(str2) || i3>strlen(str3))	return 0;

	if(i1==strlen(str1) && i2==strlen(str2) && i3==strlen(str3)){
		return 1;
	}else if(str1[i1]==str2[i2] && str3[i3]==str1[i1]){
		return (fun(i1+1,i2,i3+1) || fun(i1,i2+1,i3+1));
	}else if(str3[i3]==str1[i1]){
		return fun(i1+1,i2,i3+1);
	}else if(str3[i3]==str2[i2]){
		return fun(i1,i2+1,i3+1);
	}else{
		return 0;
	}
}

int main()
{
	while(scanf("%s%s%s",str1,str2,str3))
	{
		if(strlen(str1)+strlen(str2)==strlen(str3) && fun(0,0,0)){
			printf("YES\n");
		}else{
			printf("NO\n");
		}
	}
	
	return 0;
} 

CSDN挑戰編程交流群: 372863405

CSDN編程挑戰——《交替字符串》