题目描述
题目说明
子序列:是指在序列中选择某些元素,按照序列中的顺序连接在一起形成的。比如 wtj
、wj
、wot
、wto
都是 wotojo
的子序列。但 owt
这个序列不是。我们定义子序列长度为子序列中包含的元素数量,比如 wtj
的长度为 33,wj
的长度为 22。如果没有特殊说明,空序列和整个序列都是原序列的一个子序列。我们一般会用非空子序列来排除空序列,用真子序列来排除整个序列,用非空真子序列来同时排除两个。 子串:是指在序列中选择连续的某些元素,按照序列中的顺序连接在一起形成的,所以子串也常被称作连续子序列。比如 wot
、oto
都是 wotojo
的子串。但 wtj
不是。与子序列相同,子串包含的元素个数也被称为子串的长度,同时也有“非空”、“真”等描述方法。
题目描述
现在 33DAI 得到了一个仅包含英文小写字母的字符串 �s,33DAI 想要在其中找到一个子串 �t,使得 wotojo
是 �t 的子序列。显然有可能有多个这样的 �t,33DAI 想要一个知道最短的 �t 的长度是多少。 比如当 �s 为 wwowoxtoyjotojo
时,子串 wowoxtoyjo
、woxtoyjotojo
、woxtoyjo
等都包含子序列 wotojo
。其中最短的是 woxtoyjo
,长度为 8
。
wwowoxtoyjotojo
** ** **
^^^^^^^^
输入格式
输入一行,即字符串 �s。
输出格式
一行一个整数,表示 �t 最小长度。
输入1:
wwowoxtoyjotojo
输出1:
8
数据规模与约定
对于 100%100% 的数据,保证:�s 中仅包含小写英文字母且包含子序列 wotojo
,1≤∣�∣≤10001≤∣s∣≤1000。其中 ∣�∣∣s∣ 表示字符串 �s 的长度。
- 子任务 1(3030 分):保证 ∣�∣≤20∣s∣≤20
- 子任务 2(3030 分):保证 �s 中
w
、t
、j
三个字符都只出现一次,o
只出现了三次。换言之,�s 中仅有一个子序列是wotojo
。 - 子任务 3(4040 分):无特殊限制
样例输入content_copy
样例输出content_copy
#include<bits/stdc++.h>
using namespace std;
string s,a="wotojo";
int l,r,cnt,ans=1010;
int main()
{
cin>>s;
l=0,r=s.size();
for(int l=0;l<s.size();l++)
{
for(int r=s.size()-1;r>l;r--)
{
cnt=0;
if(r-l+1<6) continue;
for(int i=l;i<=r&&cnt<6;i++)
{
if(s[i]==a[cnt]) cnt++;
}
if(cnt==6) ans=min(ans,r-l+1);
}
}
cout<<ans;
return 0;
}