F-leetcode_浙江理工大学 2024 年程序设计竞赛(同步赛) (nowcoder.com)
这一题是我们四月六号打的一场比赛其中感觉不是很难但是我们没有写出来的一题。
题目意思:题意很简单就是给一串字符串让你找从每个字符到结尾能否找的leetcode这个字符串,找到就返回下标,否则就输出0.
这个题也是耗费了我们很长的时间,我们想着用优化后的暴力写,但是一直过不了,我们就发现暴力是过不了的,我们还想到了dfs,但发现dfs根本实现不了,因为dfs有一个特性就是回溯到节点,不符合这个题意。赛后学长们都讲了自己的方法,但是我们能力有限,根本听不懂,赛后我找到了一篇题解,看完直呼太妙了。用到了c++里面的find函数,也是暴力,但是这个暴力比我们写的暴力快多了。
附上我的代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main ()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
string s;cin>>s;
string str = "leetcode";int a,pos;//这里是把leetcode这个先弄出来,方便后面找
for (int i=0;i<s.size();i++)
{
pos=i;
for (int j=0;j<=7;j++)//从第一个字符往后枚举七次
{
a=s.find(str[j],pos);//用pos来辅助一下,是从s的哪个位置往后找
if (a==-1)
{
pos=0;break;
}//如果从这个位置往后都没有找到就直接break掉,省时间,另外把pos赋值成0直接输出
else
{
pos=a+1;
}//找到了的话,就沿着往后继续找
}
cout<<pos<<' ';//直接输出就OK了
}
return 0;
}
C++中的find函数用法_c++ find-CSDN博客对于find函数的讲解可以看这篇博客
a=s.find(str[j],pos)代码里面的这一句是点睛之笔,建议反复观看(反正我是肯定想不到的);这样写不是很快,用到了暴力,但是更快的写法我也是想不到的,把这种简单的方法看会就不错了