判断两个字符串的最长公共序列(空间复杂度为1)

在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str1;
	string str2;
	while (cin >> str1 >> str2)
	{
		if (str1.size() < str2.size())
			swap(str1, str2);
		int length1 = str1.size();
		int length2 = str2.size();
		if (length1 == 0 || length2 == 0)
		{
			cout << 0 << endl;
			return 0;
		}
		int maxsize = 0;
		int k = 0;
		for (int i = 0; i < length1; ++i)
		{
			for (int j = 0; j < length2;++j)
			{
				int flag = 0;
				k = i;
				int count = 0;
				while (k < length1 && j < length2 &&str1[k] == str2[j] || str1[k] == str2[j] - 32 || str1[k] == str2[j] + 32)
				{
					++k;
					++j;
					flag = 1;
					++count;
				}
				k = i;
				if (count > maxsize)
				{
					maxsize = count;
				}
				if (flag == 1)
					--j;
			}
		}
		cout << maxsize << endl;
		maxsize = 0;
	}
	return 0;
}

不得不说这段代码写了好久,空间复杂度为1,但是细节性太多,牛客测试用例看不到,我太难了。
对代码解析:
1.
让str1中始终存放的是最长的字符串
在这里插入图片描述
特殊例子判断但是貌似牛客并没有这个用例
在这里插入图片描述
紧接着是一个双层循环,让长字符串做外面的循环条件,短字符串做里面的循环条件
在这里插入图片描述

发布了230 篇原创文章 · 获赞 28 · 访问量 9335

猜你喜欢

转载自blog.csdn.net/weixin_43767691/article/details/103302337