D. String Game

本文介绍了一种通过二分查找优化字符串匹配的过程。该算法利用二分法确定可以在字符串t中删除的最大字符数量,以保持其包含字符串p作为子串。通过预先计算标记数组并检查每个可能的子串状态,确保了p始终是t的有效子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给你 一个字符串 t, 一个字符串 p,在给你一个序列a[i], 去掉 字符串中 下标为 a[i] 的字符。问你求出序列个数的最大值,使得p为t 的子字符串。

解法: 有字符串 t,p;
如果在 ,m time后 p 刚好是 t 的子串。
那么在 m-1 次前肯定是可以去掉字符的,m-1次之后肯定是不能去掉字符的。
所以直接 2 分区间 ,得到 m. 如何 m 次移动是合法的话, 就增加m,反之减小m.

#include <bits\stdc++.h>
using namespace std;

int a[200005], mark[200005], n,m;
string t,p;

int check(int num)
{
    for(int i=0;i<n;i++) mark[i] = 0;
    for(int i=0;i<num;i++) mark[ a[i] ] = 1;
    int leng=0, start = 0;
    for(int i=0;i<n;i++)
    {
        if(!mark[i])
        {
            if(t[i] == p[start])
            {
                leng++;
                start++;
                if(leng >= m) // t 字符串中海油 字符串 p 
                {
                    return 1;
                }
            }
        }
    }
    return 0;
}

int main()
{
    cin>>t>>p;
    n = t.length(),m = p.length();
    for(int i=0;i<n;i++) 
    {
        cin>>a[i];
        a[i]-=1;
    }
    int l = 1, r = n, ans=0;
    while(l <= r)
    {
        int mid = (l+r)/2;
        if(check(mid)) 
        {
            ans = max(ans, mid);
            l = mid+1; 
        } 
        else r = mid-1;
    }
    printf("%d\n",ans);
    return 0;
} 
XmlException: Attribute name and qualified name must be identical. file:///D:/Lua_Dating538/Assets/Plugins/Android/AndroidManifest.xml Line 3, position 61. Mono.Xml2.XmlTextReader.ReadStartTag () Mono.Xml2.XmlTextReader.ReadContent () Mono.Xml2.XmlTextReader.ReadContent () Mono.Xml2.XmlTextReader.Read () System.Xml.XmlTextReader.Read () System.Xml.XmlDocument.ReadNodeCore (System.Xml.XmlReader reader) System.Xml.XmlDocument.ReadNode (System.Xml.XmlReader reader) System.Xml.XmlDocument.Load (System.Xml.XmlReader xmlReader) UnityEditor.AndroidXmlDocument..ctor (System.String path) UnityEditor.AndroidManifest..ctor (System.String path) UnityEditor.Android.PostProcessAndroidPlayer.CopyMainManifest (System.String target, System.String playerPackage) UnityEditor.Android.PostProcessAndroidPlayer.PostProcessInternal (System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args) UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:316) UnityEditor.HostView:OnGUI()
最新发布
07-10
unity打包到Linux时出现DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files\Unity\Hub\Editor\2019.4.17f1c1\Editor\Data\PlaybackEngines\LinuxStandaloneSupport\Variations\linux64_withgfx_nondevelopment_mono'. System.IO.__Error.WinIOError (System.Int32 errorCode, System.String maybeFullPath) (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.FileSystemEnumerableIterator`1[TSource].HandleError (System.Int32 hr, System.String path) (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.FileSystemEnumerableIterator`1[TSource].CommonInit () (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.FileSystemEnumerableIterator`1[TSource]..ctor (System.String path, System.String originalUserPath, System.String searchPattern, System.IO.SearchOption searchOption, System.IO.SearchResultHandler`1[TSource] resultHandler, System.Boolean checkHost) (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.FileSystemEnumerableFactory.CreateFileNameIterator (System.String path, System.String originalUserPath, System.String searchPattern, System.Boolean includeFiles, System.Boolean includeDirs, System.IO.SearchOption searchOption, System.Boolean checkHost) (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.Directory.InternalGetFileDirectoryNames (System.String path, System.String userPathOriginal, System.String searchPattern, System.Boolean includeFiles, System.Boolean includeDirs, System.IO.SearchOption searchOption, System.Boolean checkHost) (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.Directory.InternalGetFiles (System.String path, System.String searchPattern, System.IO.SearchOption searchOption) (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.Directory.GetFiles (System.String path) (at <9577ac7a62ef43179789031239ba8798>:0) UnityEditor.FileUtil.CopyDirectoryFiltered (System.String source, System.String target, System.Boolean overwrite, System.Func`2[T,TResult] includeCallback, System.Boolean recursive) (at <e9274028962b41d3817c3a283d24f8d0>:0) UnityEditor.LinuxStandalone.LinuxDesktopStandalonePostProcessor.CopyVariationFolderIntoStagingArea (UnityEditor.Modules.BuildPostProcessArgs args, System.Collections.Generic.HashSet`1[T] filesToNotOverwrite) (at /home/bokken/buildslave/unity/build/PlatformDependent/LinuxStandalone/Extensions/Managed/LinuxDesktopStandalonePostProcessor.cs:29) DesktopStandalonePostProcessor.SetupStagingArea (UnityEditor.Modules.BuildPostProcessArgs args, System.Collections.Generic.HashSet`1[T] filesToNotOverwrite) (at <e9274028962b41d3817c3a283d24f8d0>:0) DesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at <e9274028962b41d3817c3a283d24f8d0>:0) Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown. DesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at <e9274028962b41d3817c3a283d24f8d0>:0) UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <e9274028962b41d3817c3a283d24f8d0>:0) UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <e9274028962b41d3817c3a283d24f8d0>:0) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
06-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值