A subsequence of length |x| of string s = s1s2… s|s| (where |s| is the length of string s) is a string x = sk1sk2… sk|x| (1 ≤ k1 < k2 < … < k|x| ≤ |s|).
You’ve got two strings — s and t. Let’s consider all subsequences of string s, coinciding with string t. Is it true that each character of string s occurs in at least one of these subsequences? In other words, is it true that for all i (1 ≤ i ≤ |s|), there is such subsequence x = sk1sk2… sk|x| of string s, that x = t and for some j (1 ≤ j ≤ |x|) kj = i.
Input
The first line contains string s, the second line contains string t. Each line consists only of lowercase English letters. The given strings are non-empty, the length of each string does not exceed 2·105.
Output
Print “Yes” (without the quotes), if each character of the string s occurs in at least one of the described subsequences, or “No” (without the quotes) otherwise.
Examples
input
abab
ab
output
Yes
input
abacaba
aba
output
No
input
abc
ba
output
No
Note
In the first sample string t can occur in the string s as a subsequence in three ways: abab, abab and abab. In these occurrences each character of string s occurs at least once.
In the second sample the 4-th character of the string s doesn’t occur in any occurrence of string t.
In the third sample there is no occurrence of string t in string s.
可以考虑直接模拟解决:
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int q,q1,w,e,r=0,t=0,d[26];
char a[200001],s[200001];
scanf("%s%s",a,s);
q=strlen(a);
q1=strlen(s);//记录长度
for(w=0;w<26;w++)
d[w]=-1;//初始化标记数组
for(w=0;w<q;w++)
{
if(a[w]==s[t])
{//遍历长串与短串的元素
t++;//按短串的元素为指标挨个从长串中搜,搜到一个就累加一
d[a[w]-97]=t;
}//记录长串的元素对应的在短串中的第几个
if(a[w]==s[r])//如果长串对应元素与短串相应元素相同
r++;//累加一
if(d[a[w]-97]<r) //排除长串中未在短串中出现的情况如样例中abacaba 与aba,c元素未出现,r记-1
r=d[a[w]-97];
if(r<0)
break;
}
if(r<q1)
printf("No");
else
printf("Yes");
return 0;
}