Pta考试真题训练—1125(字符串之最小子串)

子串是一个字符串中连续的一部分,而子列是字符串中保持字符顺序的一个子集,可以连续也可以不连续。例如给定字符串 atpaaabpabttpabt是一个子串,而 pat 就是一个子列。

现给定一个字符串 S 和一个子列 P,本题就请你找到 S 中包含 P 的最短子串。若解不唯一,则输出起点最靠左边的解。

输入格式:

输入在第一行中给出字符串 S,第二行给出 P。S 非空,由不超过 104 个小写英文字母组成;P 保证是 S 的一个非空子列。

输出格式:

在一行中输出 S 中包含 P 的最短子串。若解不唯一,则输出起点最靠左边的解。

输入样例:

atpaaabpabttpcat
pat

输出样例:

pabt

这题我也是在网上看见的时候发现很多题解都讲的不是很清楚,所以我就自己来动手了,这是一道乙级的题目,还是比较简单的;下面是ac码:

#include
using  namespace std;
int main(){
	int minn=99999;
	string str;
	string a;
	cin>>str>>a;
	int begin;
	for(int i=0;ik-i){
				minn=k-i;
				int begin=i;
			}
		}
		
		
	}
	cout<

 为了复杂度不会很离谱,差不多控制在0n*n的地步,直接在最长的字符串里面搜就ok了:

然后是k,i的问题,k也是有计数器的作用(k-i)就是子串末尾在原字符串的下标减去匹配初始点的下标=匹配的长度,这样就解决了,substr函数中(字符起始点,需要的长度)差不多就这样用就ok,太细节也没必要。如果有问题欢迎提出,谢谢。

你可能感兴趣的:(pta等级考试训练题目合集,算法)