div.2/C. They Are Everywhere<two pointer>

本文介绍了一种使用双指针技巧解决寻找包含所有字符类型的最小区间问题的算法实现。通过遍历字符串并利用辅助数组记录字符出现情况,实现了高效求解。文中详细解释了算法流程及关键步骤。

题意:

给出包含n (3<=n<=100000)个字符的字符串,计算出包含所有类型字符的最小区间长度。

题解:

Two pointer.注意区间的处理。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100000+100;
char s[maxn];
int vis[1000+10];
int l=0,r=0,num=0;
int n,ty=0;
int Find(char t,int pos)//向右查找所需要的字符
{
    for(;pos<n;pos++)
    {
        if(s[pos]==t)
        {
            vis[s[pos]]++;
            return pos;
        }
        vis[s[pos]]++;
    }
    return 0;
}
int main ()
{
    scanf("%d",&n);
    scanf("%s",s);
    for(int i=0;i<n;i++)//计算字符的种类
    {
        if(vis[s[i]]==0)
            ty++;
        vis[s[i]]++;
    }
    memset(vis, 0, sizeof(vis));
    for(int i=0;i<n;i++)//寻找起始区间
    {
        if(vis[s[i]]==0)
            num++;
        vis[s[i]]++;
        if(num==ty)
        {
            r=i;
            break;
        }
    }
    int ans=r+1;
    for(int i=0;i<n;i++)
    {
        if(vis[s[i]]>1)
        {
            vis[s[i]]--;
        }
        else
        {
            ans=min(ans,r-i+1);
            int p=Find(s[i],r+1);
            if(p==0)
                break;
            else
            {
                r=p;
                vis[s[i]]--;
                ans=min(ans,r-i);
            }

        }
    }
    printf("%d\n",ans);
    return 0;
}
she@she-virtual-machine:~/Desktop/qt-everywhere-opensource-src-5.15.3/build-qt5.15.3-arm64$ export SYSROOT="/home/she/arm-toolchain/gcc-arm-10.2/aarch64-none-linux-gnu/libc" export PATH="/home/she/arm-toolchain/gcc-arm-10.2/bin:$PATH" # 设置交叉编译工具链 export CC="aarch64-none-linux-gnu-gcc" export CXX="aarch64-none-linux-gnu-g++" export AR="aarch64-none-linux-gnu-ar" export RANLIB="aarch64-none-linux-gnu-ranlib" # 设置编译标志,确保包含 C++ 头文件路径 export CFLAGS="--sysroot=$SYSROOT" export CXXFLAGS="--sysroot=$SYSROOT" export LDFLAGS="--sysroot=$SYSROOT -Wl,-rpath-link,$SYSROOT/usr/lib" she@she-virtual-machine:~/Desktop/qt-everywhere-opensource-src-5.15.3/build-qt5.15.3-arm64$ rm -rf * she@she-virtual-machine:~/Desktop/qt-everywhere-opensource-src-5.15.3/build-qt5.15.3-arm64$ ../qt-everywhere-src-5.15.3/configure \ -prefix /opt/qt5.15.3-arm64 \ -sysroot $SYSROOT \ -xplatform linux-aarch64-gnu-g++ \ -opensource -confirm-license \ -release \ -qt-zlib -qt-libpng -qt-libjpeg \ -no-openssl \ -nomake examples -nomake tests \ -no-pch -no-opengl \ -skip qtwayland -skip qtwebengine + cd qtbase + /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/configure -top-level -prefix /opt/qt5.15.3-arm64 -sysroot /home/she/arm-toolchain/gcc-arm-10.2/aarch64-none-linux-gnu/libc -xplatform linux-aarch64-gnu-g++ -opensource -confirm-license -release -qt-zlib -qt-libpng -qt-libjpeg -no-openssl -nomake examples -nomake tests -no-pch -no-opengl -skip qtwayland -skip qtwebengine Preparing build tree... Creating qmake... ...................................................................In file included from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearray.cpp:43: /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearraymatcher.h: In static member function ‘static QStaticByteArrayMatcherBase::Skiptable QStaticByteArrayMatcherBase::generate(const char*, uint)’: /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearraymatcher.h:103:38: error: ‘numeric_limits’ is not a member of ‘std’ 103 | const auto uchar_max = (std::numeric_limits<uchar>::max)(); | ^~~~~~~~~~~~~~ /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearraymatcher.h:103:58: error: expected primary-expression before ‘>’ token 103 | const auto uchar_max = (std::numeric_limits<uchar>::max)(); | ^ /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearraymatcher.h:103:61: error: ‘::max’ has not been declared; did you mean ‘std::max’? 103 | const auto uchar_max = (std::numeric_limits<uchar>::max)(); | ^~~ | std::max In file included from /usr/include/c++/11/algorithm:62, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/include/QtCore/../../src/corelib/global/qglobal.h:142, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/include/QtCore/qglobal.h:1, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/include/QtCore/../../src/corelib/thread/qatomic.h:41, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/include/QtCore/qatomic.h:1, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/include/QtCore/../../src/corelib/tools/qrefcount.h:43, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/include/QtCore/qrefcount.h:1, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearray.h:44, from /home/she/Desktop/qt-everywhere-opensource-src-5.15.3/qt-everywhere-src-5.15.3/qtbase/src/corelib/text/qbytearray.cpp:42: /usr/include/c++/11/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here 3467 | max(initializer_list<_Tp> __l, _Compare __comp) | ^~~ gmake: *** [Makefile:350:qbytearray.o] 错误 1 she@she-virtual-machine:~/Desktop/qt-everywhere-opensource-src-5.15.3/build-qt5.15.3-arm64$
最新发布
10-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值