【字符串】似曾相识

2017-01-13 08:17:50来源:CSDN作者:IronCarrot人点击

首先在我开始写这个博客前,我反思一下,就这个题目来说,我最先的思路,也就是正向思路,就是把字符串从第一个开始比较,然后相同的就用一个cnt=0来进行++;当cnt和之前需要比较的字符串的长度一样长或者比该字符串位数少1的时候,那么我就输出TES,否则就输出NO,这样看起来的确没有问题,但是中间不同的字符串之后又接上刚刚出现的字符串的话,那样就会出现即使不一样的字符数超过了1个,最后也会输出YES,我考虑了快两个小时关于怎么处理中间无关的字符串,但是最后还是有问题;

以上就是正向思路,当然这个题,是逆向思路,为什么不直接考虑不一样的字符数相加的和呢?

这样直接可以减少代码的行数,非常方便,但是不容易想得到,就这个题来说,暴露出一个问题,我还不够善于逆向思考,这是一个很严重的问题,当然,在未来的日子里还要继续学习很多编程思维;

题目大意:

先给定一个需要比较的字符串;

测试数据组数;

输入字符串;


要求:如果字符串和给定字符串中不一样的字符数超过一个,那么NO,else YES;


下面是代码和我自己写的样例;


#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std;int main(){	char str[15];	char ch[1005];	while(cin>>str)	{		int len1=strlen(str);		int num,i,j,cnt;		cin>>num;		int flag;		while(num--)		{			cin>>ch;			int flag=0;			int len2=strlen(ch);			for(i=0;i<len2;i++)			{				cnt=0;				for(j=0;j<len1;j++)				{					if(str[j]!=ch[i+j])//i+j表示在当前基础上对输入的对应数组进行比较					{						cnt++;					}				}				if(cnt<2)				{					flag=1;					break;				}			}			if(flag==1)				cout<<"YES"<<endl;			else				cout<<"NO"<<endl;			}	}	return 0;}/*fuckoj3dhwajkdhawkljdwahdwajhdwajkdgwajdgwajhfgwajfgwahfgwajkvceajhsgcwajkbcwajfgcwajkbcwuacgwajkvcwahcfvfuckhfjwahfvcwajkfhfucktwgadjwakgdojfdgwajfgcwafuckojfbhwajfhwakljfhwafhlk;hwialfhwakl;fwaklfhlwakfhakfhwakfhwaklfhawlfhaklwfhwaklfhwaklfhwakfjhwakfhwakfhwajfhwakfhwakfhwakfhwaklfhakwlfhcwakfhncwaklfhwakffuckfuckfuckfuckfuckfuckfffffffuckfucktheojfuckofuckoj*//*fuckoj1fuckfuckfuckfuckufuco*/


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台