首页 > 其他分享 >ABC347B Substring

ABC347B Substring

时间:2024-04-27 16:33:57浏览次数:28  
标签:子串 非空 int len Substring 枚举 ABC347B 长度

题目描述

给你一个由小写英文字母组成的字符串 S, S 有多少个不同的非空子串?

子串是连续的子序列。例如,xxx是yxxxy的子串,但不是xxyxx的子串。

数据范围:S 是长度在 1 和 100 之间(含)的字符串,由小写英文字母组成。
题解

我认为这道题放在普及组的话,非常适合放在第一题和第二题之间,当我们看到数据范围是100的话,这个最大可承受的时间复杂度是\(O(n^4)\),所以我们可以枚举。这里要求的是所以不同的非空子串的长度,所以我们需要在每个长度上都找出是否有相同的子串,比如说yay,在长度为1的时候,就是相同的非空子串

所以第一个维度我们应该先枚举长度len,第二个维度枚举起点i,那么终点我们就知道了,是j=i+len,对于每一个\((i,j)\)之间的子串,我们来比较长度为len的,起点k在\([1-i-1]\)的所有子串,是否和\([i,len]\)的子串相同,所以我们枚举len,枚举起点i,枚举子集的起点k,比较字符串是否相等,时间复杂度是\(o(n^4)\),代码如下:

点击查看代码
#include <bits/stdc++.h>

using namespace std;

const int maxn=105;
char s[maxn];

int ans;
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int len=1;len<=n;len++){
        for(int i=1;i<=n;i++){
            if(i+len-1>n) break;
            int cnt=0;
            for(int j=1;j<i;j++){
                int k=0;
                while(s[i+k]==s[j+k]&&k<len) k++;
                if(k==len) {
                    cnt=1;
                    break;
                }
            }
            if(cnt==0) {
                //cout<<i<<endl;
                ans+=1;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

标签:子串,非空,int,len,Substring,枚举,ABC347B,长度
From: https://www.cnblogs.com/sdfzls/p/18162202

相关文章

  • js substr 与 substring 有什么区别吗
    在JavaScript中,substr和substring是用于提取字符串的两个方法,它们的功能类似,但有一些区别:1.substr(start,length)方法:参数:start:必需。要提取的子字符串的起始位置。如果为负数,表示从字符串末尾开始计数。length:可选。要提取的字符数。如果省略或为负数,则提取到字符......
  • JavaScript实现文件大小转换、单位转换、toFixed、indexOf、substr、substring、B、KB
    constbytesToSize=(size)=>{if(size<0.1*1024){//小于0.1KB,则转化成Bsize=size.toFixed(2)+'B'}elseif(size<0.1*1024*1024){//小于0.1MB,则转化成KBsize=(size/1024).toFixed(2)+'KB'}else......
  • D. Non-Palindromic Substring
    D.Non-PalindromicSubstringAstring$t$issaidtobe$k$-goodifthereexistsatleastonesubstring$^\dagger$oflength$k$whichisnotapalindrome$^\ddagger$.Let$f(t)$denotethesumofallvaluesof$k$suchthatthestring$t$is$k$-good.Yo......
  • 从 String.prototype.substring 的区间开始
    因为使用String.prototype.substring(start,end)或者Array.prototype.slice(start,end)的时候偶尔会想不起来这些函数的区间代表的是什么。在这里记录一下。不同函数的差异这些区间都是[start,end),即是包括start,但是不包括end(当没有传入end时,end视为数组或者字符串......
  • E. Nearly Shortest Repeating Substring
    #include<iostream>#include<algorithm>#include<cstring>#include<cmath>usingnamespacestd;intn,m;intmain(){ cin>>n; while(n--) { //strings; cin>>m; strings; cin>>s; intres=m; f......
  • E. Nearly Shortest Repeating Substring
    原题链接题解1.模拟题,注意细节2.时间复杂度\(O(n·sqrt(n))\)code#include<bits/stdc++.h>usingnamespacestd;intn;strings;intcheck(intlen){intflag=0;for(intk=0;k<len;k++){inta[26]={0};for(inti=k;i<n;i+=len)......
  • Codeforces Round 937 (Div. 4)----->E. Nearly Shortest Repeating Substring
    一,思路:1.这题很容易想到枚举n的因数(时间复杂度n^(1/2)),然后根据这个长度枚举字符串,看是否满足最多只有一个不相同(时间复杂度n)。总的时间复杂度是(n根号n)的级别。又n是1e5级别所以可以过。但是当n是1e6就不行了。2.难点在于如何判断,一个字符串的不同字符数量,主要是hshah......
  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询
    在PostgreSQL中,我们可以使用SELECTDISTINCT和SUBSTRING函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对resource_version字段的去重查询。1.SELECTDISTINCT语句SELECTDISTINCT语句用于从表中选择不重复的记录。如果没有指定列名,则会选择所有列。在......
  • CF1930D1 - Sum over all Substrings (Easy Version)
    对于每一个\(f(i,j)\),我们考虑如何计算。我们发现,\(\texttt{1010}\)式的字符串很有用,所以这启发我们如果遇到了一个模式\(p_i=\texttt{'1'}\),那么我们可以在\(i+1\)的位置放一个\(\texttt{'1'}\)。这样我们直接处理了\(i,i+1,i+2\)。容易证明这是最优的。#incl......
  • UVA10829 L-Gap Substrings
    我永远喜欢数据结构。貌似是此题中第一个使用SA+分治+二维数点做法的题解?题目传送门给出字符串\(s\)和常数\(g\),求出有多少四元组\((l_1,r_1,l_2,r_2)\),满足\(s[l_1,r_1]=s[l_2,r_2]\)且\(r_1+g+1=l_2\)。\(T\)组数据,\(1\leT,g\le10\),\(|s|\le5\times10......