c语言子序列问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言子序列问题相关的知识,希望对你有一定的参考价值。
如果字符串str1中字符依次全部出现在字符串str2中(不要求连续)称str1是str2的子序列。
先输入一个整数n,代表有n组测试数据。
每组数据包括两个字符串str1,str2(0《=str1《str2《20)‘
如果str1是str2的子序列,输出“YES”,否则输出“NO”
int stringLen(char s[])
int len = 0;
while(s[len]) ++len;
return len;
int includeStr(char s[], char t[])
int i,j,k;
for(i = 0; s[i]; ++i)
if(s[i] == t[0])
k = i + 1;
for(j = 1; t[j] == s[k] && s[k] && t[j]; ++k,++j);
if(t[j] == '\\0') return i;
return -1;
int main()
char s[30],t[30];
int n;
scanf("%d",&n);
while(n--)
scanf("%s%s",t,s);
if(includeStr(s,t) >= 0)
printf("YES!\\n");
else printf("NO!\\n");
return 0;
参考技术A 给个思路
对字符串str1、str2本身排序,使字符串中的字符升序或降序排列
然后用strstr(str1,str2)函数就可以判断是否是子串了
最长递减子序列问题
文章大纲
最长递减子序列问题是找到给定序列的子序列,其中子序列的元素按排序顺序从高到低排列,并且子序列尽可能长。该子序列不一定是连续的或唯一的。
请注意,该问题特别针对不需要连续的子序列,即子序列不需要占用原始序列中的连续位置。
例如,考虑以下子序列:
[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]
最长递减子序列为[12,10,9,5,3],长度为5;输入序列没有6元递减子序列。
本例中最长的递减子序列并不是唯一的:例如,[12,10,6,5,3]是同一输入序列中另一个等长递减子序列。
我们可以用递归来解决这个问题。对于每个项目,有两种可能性:
- 如果当前项目小于LDS中的前一个元素,则将其包含在LDS中,并对其余项目重复出现。
- 从LDS中排除当前项目,并重复剩余项目。
最后,返回通过包含或排除当前项而获得的最大值。递归的基本情况是没有留下任何项。以下是该想法的C++、Java和Python
以上是关于c语言子序列问题的主要内容,如果未能解决你的问题,请参考以下文章