刷题--字符串

  1. 拉齐有一个01序列,他可以对这个序列进行任意多次变换,每次变换都是把序列的最后若干个元素放到最前面,例如:010011,将最后3个元素011放到最前面,序列变为011010。所有变换结束后,拉齐需要挑出一个全为1的连续区间,要求最大化区间长度。
    在这里插入图片描述
#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
int main()
{
    string str;
    cin>>str;
    int len=str.size();
    string s=str+str;
    int res=0;
    int i=0;
    int j=0;
    while(i<2*len)
    {
  

        while(i<2*len&&s[i]=='1')
        {
         i++;   
        }
        res=max(res,i-j);
        i++;
        j=i;
       
    }
   // cout<<res<<endl;
    
    if(res>len)
    {
        cout<<len<<endl;
        
    }
    else{
        cout<<res<<endl;
    }
    
    
    return 0;
}

思路:把字符串相加,则一次遍历就可以求出最大联续‘1’的个数,需要注意若字符串全为1,则需要另行处理。
2.
在这里插入图片描述

class Solution {
public:
    int maxlength(vector<int>&A,vector<int>&B,int addA,int addB,int len)
    {
        int res=0;
        int k=0;
        for(int i=0;i<len;i++)
        {
            if(A[addA+i]==B[addB+i])
            {
                k++;
            }
            else
            {
                k=0;
            }
            res =max(res,k);
        }
        return res;
    }
    int findLength(vector<int>& A, vector<int>& B) {
        int lenA=A.size();
        int lenB=B.size();
        int ret=0;
        for(int i=0;i<lenA;i++)
        {
            int len=min(lenA-i,lenB);
            int maxlen=maxlength(A,B,i,0,len);
            ret =max(maxlen,ret);
        }
        for(int i=0;i<lenB;i++)
        {
            int len=min(lenB-i,lenA);
            int maxlen=maxlength(A,B,0,i,len);
            ret =max(maxlen,ret);
        }
        return ret;

    }
};

这个题使用滑动窗口法进行,计算最大的子串的长度。这个题必须掌握!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值