69,336
社区成员
发帖
与我相关
我的任务
分享
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdbool.h>
#include<string.h>
int f(char *, char *);
int main(void)
{
char a[100] = { '\0' }, b[100] = {'\0'};
scanf("%s%s", a, b);
int i, lena, lenb;
lena = strlen(a); lenb = strlen(b);
for (i = 0; i < lena; i++)
{
if (isalpha(a[i]))
a[i] = tolower(a[i]);
}
for (i = 0; i < lenb; i++)
{
if (isalpha(b[i]))
b[i] = tolower(b[i]);
}
printf("%d\n", f(a, b));
system("pause");
return 0;
}
int f(char *a, char *b)
{
int lena, lenb;
lena = strlen(a); lenb = strlen(b);
int tempnum;
char tempc[100] = { '\0' };
if (lena > lenb)
{
tempnum = lena;
lena = lenb;
lenb = tempnum;
strcpy(tempc, a);
strcpy(a, b);
strcpy(b, tempc);
}
int i, j, n, n1, k, m, p[100] = { 0 }, q[100] = { 0 },r=0,max;
char c[100][100] = { '\0' }; char d[100] = { '\0' };
for (i = 0; i < lena; i++)
{
n = 0;
for (j = 0; j < lena - i; j++)
{
n1 = 0;
for (k = j; k <= j + i;k++)
c[n][n1++] = a[k];
n++;
}
for (j = 0; j < n; j++)
for (k = 0; k < lenb - i; k++)
{
n1 = 0;
for (m = k; m <= k + i; m++)
d[n1++] = b[m];
if (strcmp(c[j], d) == 0)
p[k]=i;
}
max = p[0];
for (j = 0; j < 100; j++)
if (p[j]>max)
max = p[j];
q[r++] = max;
}
max = q[0];
for (i = 0; i < 100; i++)
if (q[i]>max)
max = q[i];
return max+1;
}
#include "stdafx.h"
#include<string.h>
#include<stdlib.h>
void lower(char *a) {
for (int i = 0; a[i] != '\0'; i++) {
if (a[i] >= 'A' && a[i] <= 'Z') {
a[i] = a[i] - 'A' + 'a';
}
}
}
int max(int a, int b) {
return (a > b ? a : b);
}
int main()
{
char a[100] = "aaa", b[100] = "abb";
int dp[100][100];
//scanf("%s%s", a, b);
lower(a);
lower(b);
for (int i = 1; a[i - 1] != '\0'; i++)
for (int j = 1; b[j - 1] != '\0'; j++) {
dp[i - 1][j-1] = 0;
}
for (int i = 1; a[i-1] != '\0'; i++) {
for (int j = 1; b[j-1] != '\0'; j++) {
if (a[i-1] == b[j-1]) {
dp[i][j] = dp[i - 1][j-1] + 1;
}
else {
dp[i][j] = max(dp[i - 1][j],dp[i][j-1]);
}
}
}
printf("%d\n", dp[strlen(a)][strlen(b)]);
system("pause");
return 0;
}
上面那个不能处理有重复字符的字符串#include "stdafx.h"
#include<string.h>
#include<stdlib.h>
void lower(char *a) {
for (int i = 0; a[i] != '\0'; i++) {
if (a[i] >= 'A' && a[i] <= 'Z') {
a[i] = a[i] - 'A' + 'a';
}
}
}
int max(int a, int b) {
return (a > b ? a : b);
}
int main()
{
char a[100] = "abb", b[100] = "aca";
int dp[100];
//scanf("%s%s", a, b);
lower(a);
lower(b);
dp[0] = 0;
for (int i = 1; a[i-1] != '\0'; i++) {
for (int j = 1; b[j-1] != '\0'; j++) {
if (a[i-1] == b[j-1]) {
dp[i] = max(dp[i - 1] + 1,dp[i]);
}
else {
dp[i] = max(dp[i - 1],dp[i]);
}
}
}
printf("%d\n", dp[strlen(a)]);
system("pause");
return 0;
终于能上网了
#include<stdio.h>
#include<string.h>
#define MAX 100
int main(void)
{
char str1[MAX]={0},str2[MAX]={0},buf[MAX];
int i,j,k,l,ans,len,flag=0;
ans = 0;
scanf("%s%s",str1,str2);
len = strlen(str1)>strlen(str2)?strlen(str2):strlen(str1);
for(i=1;i<=len;i++)
{
for(k=0;k<len;k++)
{
for(l=0;l<i&&l+i<len;)
{
for(j=0;j<i;j++,l++)
if(strlen(str1)>len&&str2[l+k]!=0)
buf[j] = str2[l+k];
else if(strlen(str1)<=len&&str2[l+k]!=0)
buf[j] = str1[l+k];
buf[j] = 0;
//printf("%s\n",buf);
if(strstr(strlen(str1)>len?str1:str2,buf)==NULL)
break;
if(i>ans)
{
ans = i;
flag = !flag;
break;
}
}
if(flag)
{
flag = !flag;
break;
}
}
}
printf("%d",ans);
return 0;
}
#include<stdio.h>
#include<string.h>
#define MAX 100
int main(void)
{
char str1[MAX],str2[MAX],buf[MAX];
int i,j,k,l,ans,len;
ans = 0;
scanf("%s%s",str1,str2);
len = strlen(str1)>strlen(str2)?strlen(str2):strlen(str1);
for(i=1;i<=len;i++)
{
for(k=0;k<len;k++)
{
for(l=0;l<i;)
{
for(j=0;j<i;j++,l++)
if(strlen(str1)>len)
buf[j] = str2[l+k];
else
buf[j] = str1[l+k];
buf[j] = 0;
//printf("%s\n",buf);
if(strstr(strlen(str1)>len?str1:str2,buf)==NULL)
break;
if(i>ans)
ans = i;
}
}
}
printf("%d",ans);
return 0;
}