牛客——字符串(尺取法与滑动窗口)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中,长度最短是多少。

输入描述:

一行一个字符串S。只包含小写字母。S的长度不超过106.

输出描述:

一行一个数字,代表最短长度。数据保证存在一个合法的S的子串。

牛客——字符串(尺取法与滑动窗口)_第1张图片

#include
using namespace std;
int book[26]={0};
int check()
{
    for(int i=0;i<26;i++)
    {
        if(!book[i])
            return 0;
    }
    return 1;
}
int main()
{
    string s;
    cin>>s;
    int n=s.size();
    int ans=1e6+10;
    for(int l=0,r=0;r

涉及到字符串的子串长度问题,可以联想到尺取法。

尺取法是一种常用的解决某些问题的算法技巧。它使用两个指针来遍历数组或序列,并根据问题的要求来调整指针的位置,从而求解问题。

尺取法通常用于滑动窗口类型的问题,其中需要在数组或序列中找到满足某些条件的子数组或子序列。尺取法的基本思想是维护一个窗口,通过移动窗口的左右边界来寻找满足条件的子数组或子序列。

尺取法的步骤如下:

  1. 初始化左右指针的位置,通常为数组或序列的开头。
  2. 进入循环,循环条件为右指针小于数组或序列的长度:
    • 根据问题的要求,调整窗口的大小和位置,即移动左右指针。
    • 在每次移动指针后,根据问题的要求更新结果或进行其他操作。
  3. 循环结束后,得到满足条件的子数组或子序列以及相应的结果。

尺取法的优点是时间复杂度较低,通常为 O(n),其中 n 是数组或序列的长度。它适用于一些需要遍历数组或序列的问题,例如求解最长连续子数组的和等。

尺取法的具体实现因问题而异,需要根据具体的问题来调整左右指针的移动规则和条件判断。在应用尺取法时,需要注意边界条件和指针的移动规则,确保算法的正确性。

你可能感兴趣的:(算法,尺取法)