啊啊啊啊啊啊啊啊!一直wrong answer!!!!求助呀!!!!

10 篇文章 0 订阅

时间限制: 4000ms 内存限制: 256MB


描述

对于两个长度相等的字符串,我们定义其距离为对应位置不同的字符数量,同时我们认为距离越近的字符串越相似。例如,“0123”和“0000”的距离为 3,“0123”和“0213”的距离则为 2,所以与“0000”相比,“0213”和“0123”最相似。

现在给定两个字符串 S1 和 S2,其中 S2 的长度不大于 S1。请在 S1 中寻找一个与 S2 长度相同的子串,使得距离最小。

输入

输入包括多组数据。第一行是整数 T,表示有多少组测试数据。每组测试数据恰好占两行,第一行为字符串 S1,第二行为 S2。所有字符串都只包括“0”到“9”的字符。

输出

对于每组测试数据,单独输出一行“Case #c: d”。其中,c 表示测试数据的编号(从 1 开始),d 表示找到的子串的最小距离。

数据范围

1 ≤ T ≤ 100

小数据:字符串长度不超过 1000

大数据:字符串长度不超过 50000

样例输入
3
0123456789
321
010203040506070809
404
20121221
211
样例输出
Case #1: 2
Case #2: 1
Case #3: 1
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
	int T;
	cin>>T;
	if(T>100&&T<1)
		return 0;
	vector<int> case_out;
	for(int i=0;i<T;i++ )
	{
		string str1, str2;
		cin>>str1>>str2;
		int len1=str1.size();
		int len2=str2.size();
		for(int i=0;i<len1;i++)
			if(!(str1[i]>='0'||str1[i]<='9'))
				return 0;
		for(int i=0;i<len2;i++)
			if(!(str2[i]>='0'||str2[i]<='9'))
				return 0;
		if(len2>len1)
			return 0;	
		if(len1>50000)
			return 0;
		int distense=len2;		
		for(int i=0;i<len1-len2;i++)
		{	
			int count=0;
			for(int j=0;j<len2;j++)
				if(str1[i+j]!=str2[j])
					count++;
			if(count<distense)
				distense=count;			
		}
		case_out.push_back(distense);
	}
	int i=1;
	for(vector<int>::iterator p=case_out.begin();p!=case_out.end();p++)
	{		
		cout<<"Case #"<<(i++)<<": "<<*p<<endl;		
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值