字符数组之字符环(OpenJudge)

字符数组之字符环

描述:
有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。

输入:
一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。
输出
输出一个整数,表示这两个字符环上最长公共字符串的长度。

样例输入:
ABCEFAGADEGKABUVKLM MADJKLUVKL

样例输出:
6

字符环
  这里由于strcpy函数不应许对同一个数组的内存空间进行操作,所以每个字符数组我另外赋值了一个相同内容的内存空间。下面代码都是c语言实现。

#include <stdio.h>
#include <string.h>
int main(void){
	int i=0,j=0,m=0,len1,len2,len_min,k,max=0;
	char str1[255],str2[255],str[255],str_[255];
	char str1_[255],str2_[255];
	printf("please input two strings:");
	gets(str1);
	fflush(stdin);
	gets(str2);
	len1=strlen(str1);
	len2=strlen(str2);
	len_min=(len1>len2)?len2:len1;
	strcpy(str1_,str1);
	strcat(str1,str1_);
	strcpy(str2_,str2);
	strcat(str2,str2_);
	printf("\n%d\n",len_min);
//对其中一个字符数组的第一个字符开始扫描
	for(i=0;i<len1;i++)		
	//与第二个字符数组的每一个字符匹配
		for(j=0;j<len2;j++){
		//判断是否相等,相等则两数组同步向后位移,判断
			if(str1[i]==str2[j]){
				k=1;
				str_[k-1]=str1[i];
				while(str1[i+k]==str2[j+k]&&k<=len_min){
					str_[k]=str1[i+k];
					k++;
				}
			}
			//找到字符数组的最大相同长度
			if(k>max){
				for(m=0;m<k;m++){
					str[m]=str_[m];
					printf("%c",str[m]);
				}
				max=k;
				printf("\n");

			}
		}
	for(m=0;m<max;m++)printf("%c ",str[m]);
	return 0;
}

发布了15 篇原创文章 · 获赞 9 · 访问量 102
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览