关于子串的题(暴力)

LeetCode 3713题解析:最长平衡子串的暴力枚举与优化 字符串处理是算法中的基础课题,平衡子串特指0和1数量相等的二进制子串。通过前缀和与滑动窗口等技术,可以高效解决这类问题。暴力枚举作为入门解法,虽然时间复杂度较高(O(n^3)),但能帮助理解问题本质。优化方案如前缀和可将复杂度降至O(n^2),而滑动窗口或哈希表法则能实现O(n)的最优解。这类技术在网络数据校验、编码理论等领域有广泛应用,LeetCode周赛430中的这道题是字符串处理的经典案例。 阅读详情

1、子串分值

 

过40%的代码:

import java.io.*;
import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;

public class Main
{
    static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    static int N = (int)1e4 + 10;
    static int a[] = new int[N];
    static Map<Character, Integer> map = new HashMap<>();

    public static void main(String[] args ) throws IOException
    {
        String s = rd.nextLine();
        int res = 0;
        for(int i = 0 ; i < s.length() ; i ++)
        {
            for(int j = i  ; j < s.length() ; j ++)
            {
                String a = s.substring(i,j + 1);
                char str[] = a.toCharArray();
                for(int k = 0 ; k < str.length ; k ++)
                {
                    if(map.get(str[k]) == null)  map.put(str[k],1);
                    else  map.put(str[k],map.getOrDefault(str[k],0)  + 1);
                }
                for(Character c: map.keySet())  if(map.get(c) == 1)  res ++;
                map.clear();
//                for(Character c: map.keySet())  pw.print(c + ":" + map.get(c) + " ");
//                pw.println();
            }
        }
        pw.println(res);
        pw.flush();
    }
}

class rd
{
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");

    static String nextLine() throws IOException { return reader.readLine(); }
    static String next() throws IOException
    {
        while(!tokenizer.hasMoreTokens())  tokenizer = new StringTokenizer(reader.readLine());
        return tokenizer.nextToken();
    }
    static int nextInt() throws IOException { return Integer.parseInt(next()); }
    static double nextDouble() throws IOException { return Double.parseDouble(next()); }
    static long nextLong() throws IOException { return Long.parseLong(next()); }
    static BigInteger nextBigInteger() throws IOException
    {
        BigInteger d = new BigInteger(rd.nextLine());
        return d;
    }
}

class math
{
    int gcd(int a,int b)
    {
        if(b == 0)  return a;
        else return gcd(b,a % b);
    }

    int lcm(int a,int b)
    {
        return a * b / gcd(a, b);
    }

    // 求n的所有约数
    List get_factor(int n)
    {
        List<Long> a = new ArrayList<>();
        for(long i = 1; i <= Math.sqrt(n) ; i ++)
        {
            if(n % i == 0)
            {
                a.add(i);
                if(i != n / i)  a.add(n / i);  // // 避免一下的情况:x = 16时,i = 4 ,x / i = 4的情况,这样会加入两种情况  ^-^复杂度能减少多少是多少
            }
        }

        // 相同因子去重,这个方法,完美
        a = a.stream().distinct().collect(Collectors.toList());

        // 对因子排序(升序)
        Collections.sort(a);

        return a;
    }

    // 判断是否是质数
    boolean check_isPrime(int n)
    {
        if(n < 2) return false;
        for(int i = 2 ; i <= n / i; i ++)  if (n % i == 0) return false;
        return true;
    }
}

class PII implements Comparable<PII>
{
    int x,y;
    public PII(int x ,int y)
    {
        this.x = x;
        this.y = y;
    }
    public int compareTo(PII a)
    {
        if(this.x-a.x != 0)
            return this.x-a.x;  //按x升序排序
        else return this.y-a.y;  //如果x相同,按y升序排序
    }
}

class Edge
{
    int a,b,c;
    public Edge(int a ,int b, int c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }
}

class Line implements Comparable<Line>
{
    double k; // 斜率
    double b; // 截距

    public Line(double k, double b)
    {
        this.k = k;
        this.b = b;
    }

    @Override
    public int compareTo(Line o)
    {
        if (this.k > o.k) return 1;
        if (this.k == o.k)
        {
            if (this.b > o.b) return 1;
            return -1;
        }
        return -1;
    }
}

class mqm
{
    int fa[] = new int[1005];
    void init()
    {
        for(int i = 1 ; i <= 1000 ; i ++)  fa[i] = i;
    }
    void merge(int x, int y) { fa[find(x)] = find(y); }
    int find(int x)
    {
        if(x != fa[x])  fa[x] = find(fa[x]);
        return fa[x];
    }
    boolean query(int x, int y) { return find(x) == find(y); }
}

2、子串分值和

 

过40%的代码:

import javax.print.DocFlavor;
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Main
{
    static Scanner sc = new Scanner(System.in);
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    static int N = (int)3000+ 10;
    static Set<Character> set = new HashSet<>();

    public static void main(String[] args) throws IOException
    {
        String s = rd.next();
        long sum = 0;
        for(int i = 0 ; i < s.length() ; i ++)
        {
            set.clear();
            for(int j = i ; j < s.length() ; j ++)
            {
                 String s1 = s.substring(i,j + 1);
                 char a[] = s1.toCharArray();
                 for(int k = 0 ; k < a.length ; k ++)  set.add(a[k]);
                 sum += set.size();
            }
        }
        pw.println(sum);
        pw.flush();
    }
}

class rd
{
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");

    static String nextLine() throws IOException { return reader.readLine(); }
    static String next() throws IOException
    {
        while(!tokenizer.hasMoreTokens())  tokenizer = new StringTokenizer(reader.readLine());
        return tokenizer.nextToken();
    }
    static int nextInt() throws IOException { return Integer.parseInt(next()); }
    static double nextDouble() throws IOException { return Double.parseDouble(next()); }
    static long nextLong() throws IOException { return Long.parseLong(next()); }
    static BigInteger nextBigInteger() throws IOException
    {
        BigInteger d = new BigInteger(rd.nextLine());
        return d;
    }
}

class PII
{
    int x,y;
    public PII(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

class Edge
{
    int a,b,c;
    public Edge(int a ,int b, int c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }
}

 

 

 

 

 

 

 

LeetCode第647题---回文子串的个数 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 示例 1: 输入: “abc” 输出: 3 解释: 三个回文子串: “a”, “b”, “c”. 示例 2: 输入: “aaa” 输出: 6 说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”. 注意: 输入的字符串长度不会超过1000。 链接:https://leetcode-cn.com/problems/pal 阅读详情

相关推荐

集成学习之GBDT

GBDT

joejoeqian的博客 1256

LeetCode 3713题解析:暴力枚举法求最长平衡子串

字符串处理是算法中的基础课题,平衡子串问题要求找出0和1数量相等的连续子序列。暴力枚举作为经典解题范式,通过双重循环遍历所有可能子串,虽然时间复杂度为O(n²),但能确保解的正确性。该方法的工程价值在于为复杂问题提供基准解,特别适合面试场景展示思维过程。在实际应用中,当处理长度不超过1000的字符串时,配合提前终止等优化技巧,暴力解法完全可行。本文以LeetCode 3713题为例,详解如何用Python实现暴力枚举,并分析其适用场景与优化方向,涉及滑动窗口、前缀和等高频算法热词。

weixin_33709609的博客 501

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

transformer原理

qq_38253797的博客 2万+

「力扣」第 5 题:最长回文子串(暴力解法、中心扩散、动态规划)

「力扣」第 5 题:最长回文子串(暴力解法、中心扩散、动态规划) 解释题意 大家好,这里是「力扣」视频题解第 5 题:最长回文子串。 这道题给我们一个字符串 s,让我们找出这个字符串 s 的最长回文子串,并且告诉我们,s 的最大长度为 1000。 看到这个提示,我们简单计算一下,100010001000 的平方是 101010 的 666 次方,经验告诉我们,可以设计一个大欧 N 方的算法。(这里...

李威威的博客 2826

2026年GESP3月认证C++五级真题解析

因为要合并成升序数组,所以当A[i]小于等于B[j]时,取A[i],否则取B[j]。当a[i]>a[j]时,左边数组中从i到m的所有元素都大于a[j],因此逆序对数量增加m-i+1。给定一个包含n个互不相同的正整数的数组A与一个包含m个互不相同的正整数的数组B,请你帮忙计算有多少个数在数组A与数组B中均出现。下面代码实现两个整数除法,其中被除数为一个“大整数”,用字符串表示,除数是一个小整数,用int表示,则横线处应该填写()。且a[i] > a[j],则a[i]和a[j]是一个逆序对。

lan_in的博客 118

【异常】OpenClaw LLM请求超时故障全链路排查与解决方案 LLM request timed out. 网络连接超时了

摘要: OpenClaw LLM请求超时故障是高频网络交互问题,表现为客户端在预设时间内未收到服务端响应。根因分为四类:客户端配置缺陷(如超时阈值不合理)、网络链路异常(防火墙拦截等)、服务端问题(限流/宕机)及硬件瓶颈(算力不足)。解决方案分三步: 通用排查:检查网络连通性、关闭防火墙/代理校验,调整超时阈值至60-300秒; 分场景修复:云端API需核对密钥/限流规则,本地部署需验证服务状态与硬件资源; 兜底方案:重启程序、更新版本或更换服务端点,结合日志精准定位。修复后不影响OpenClaw数据完整性

奶爸的编程之路,也就一周冷个三天 2058

【刷题笔记】串联所有单词的子串||暴力通过||滑动窗口

给定一个字符串 s 和一个字符串数组 words。words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。例如,如果 words = [“ab”,“cd”,“ef”], 那么 “abcdef”, “abefcd”,“cdabef”, “cdefab”,“efabcd”, 和 “efcdab” 都是串联子串。“acdbef” 不是串联子串,因为他不是任何 words 排列的连接。返回所有串联子串在 s 中的开始索引。

qq_42898299的博客 1179

LeRobot 入门教程(十一)π0(Pi0)π0.5(Pi0.5)训练、推理、部署

本文介绍了Physical Intelligence公司开发的π₀和π₀.₅系列通用机器人控制视觉-语言-动作模型。π₀作为首款基础模型,融合流匹配、跨实体训练等技术,支持50Hz高频控制。π₀.₅是其升级版,通过异构数据协同训练解决开放世界泛化问题,在Libero基准测试中表现优异。文章详细说明了两个模型的安装要求、使用方法、训练策略及关键参数配置,包括混合精度训练、梯度检查点等优化技术,为机器人在多样化场景中的语义理解和动作控制提供了完整解决方案。

2506_90492529的博客 5038

leetcode #5 最长回文子串【暴力法、动态规划、Manacher算法】 | 刷题之路第二站——动态规划类问题

题号 5 题目描述 给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。 示例1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例2: 输入: "cbbd" 输出: "bb" 链接:leetcode #5 最长回文子串 解题思路1——暴力法 1- 找出给定字符串的所有子串 2- 按照子串的长...

m0_37714470的博客 328

华为OD技术面八股文_C++_02

汇总华为OD面试C++方面计数八股文真题,提供详细解答。

qq_45776114的博客 765

FAST-LIVO2 源码精读(十六):接入自定义传感器——多雷达适配与内外参标定

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏第十六篇。上一篇拆解了中每个关键参数的物理含义与调参路径,并反复强调外参RclPcl与时间偏移配错即全局失效;本篇承接这一悬念,回答更前置的工程问题——如何把 FAST-LIVO2 接到一套全新硬件上:新雷达如何通过的类型分支适配、相机内参与畸变模型如何配置、两组外参与时间偏移如何标定出来并填入 YAML,最后给出一份落地检查清单。

PX4-SLAM-PNC 199

洛谷--暴力枚举法的4道题【1、四位完全平方数 2、验证子串 3、珠心算测验 4、火柴棒等式】

洛谷--暴力枚举法的4道题【1、四位完全平方数 2、验证子串 3、珠心算测验 4、火柴棒等式】

m0_74044018的博客 475

基于Simulink的柔性关节人形机器人振动抑制控制仿真

本文完成了基于Simulink的柔性关节人形机器人振动抑制控制仿真,实现了:✅ 建立二质量柔性关节动力学模型✅ 设计加速度反馈主动阻尼控制器✅ 对比陷波滤波与状态反馈效果✅ 验证大幅运动下的快速振动衰减能力✅ 为高动态人形机器人操作(如击掌、搬运)提供平滑执行基础。

xiaoheshang_123的博客 129

别再暴力循环了!用C++的find函数5分钟搞定字符串子串验证题

本文介绍了如何利用C++的find函数高效解决字符串子串验证问题,避免暴力循环的低效实现。通过详细解析find函数的核心用法、性能特点和边界条件处理,帮助开发者快速掌握这一实用技巧,提升代码效率和可读性。

weixin_33671935的博客 466

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

子串简写 暴力 c++ 蓝桥杯G题

【代码】子串简写 过30%样例

weixin_66198012的博客 251

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

力扣 第5题 最长回文子串(暴力or中心扩展法)C语言

1.暴力法:适用于理解回文子串概念的初学者,代码简单,但效率低,时间复杂度为O(n^3),不适合处理长字符串。2.中心扩展法:更高效,适用于实际应用,时间复杂度为 O(n^2),是解决最长回文子串问题的常用方法。

2301_79277275的博客 702

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java版LeetCode热题100之最长回文子串:从暴力到Manacher的全方位解析

多解法思维:同一问题可从不同角度切入(DP、中心扩展、Manacher)。权衡取舍:面试中优先选择简洁、鲁棒、易解释的解法。回文建模能力:掌握“中心”、“对称”、“扩展”等核心概念。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 923

【qduoj - 夏季学期创新题】最长公共子串(水题暴力枚举,不是LCS啊)

题干: 描述   编写一个程序,求两个字符串的最长公共子串。输出两个字符串的长度,输出他们的最长公共子串及子串长度。如果有多个最长公共子串请输出在第一个字符串中先出现的那一个。 特别注意公共子串中可能包含有空格,但不计回车符! 输入 两个字符串,回车结尾,每个字符串中都可能含有空格(每个字符串的长度不超过200个字符) 输出 一共有四行,前两行以Length of String1:...

xuanweiace的博客 517

最长回文子串:从暴力枚举到中心扩散,华为OD机试高频题解析

回文串是字符串处理中的经典概念,指正读反读都相同的序列。其核心原理在于对称性,可通过中心向两侧扩展或动态规划状态转移进行高效判断。掌握回文串算法不仅有助于理解双指针、动态规划等基础算法思想,更能提升在数据处理、文本分析等场景下的问题解决能力。本文聚焦于华为OD机试等编程测评中的高频题目——最长回文子串,深入剖析暴力枚举、动态规划与中心扩散三种主流解法。其中,中心扩散法凭借其O(n²)的时间复杂度与O(1)的空间复杂度,在时间受限的机试环境中展现出极高的‘性价比’,是平衡效率与实现难度的首选策略。文中将结合具

weixin_33462927的博客 290

别再暴力搜索了!用C++动态规划5分钟搞定PTA最长回文子串题

本文详细介绍了如何使用C++动态规划算法高效解决PTA最长回文子串问题。通过分析回文子串的特性,设计状态转移方程,并提供完整的C++代码实现,帮助读者在5分钟内掌握这一高效解法,显著提升算法解题效率。

weixin_30947043的博客 437

牛客练习赛13 A 幸运数字Ⅰ 【暴力】

题目链接 https://www.nowcoder.com/acm/contest/70/A 思路 暴力每一个子串 用 MAP 标记一下 然后 最后 遍历一遍 MAP 找出 出现次数最多 并且 字典序最小的那个 AC代码 #include <cstdio> #include <cstring> #include <...

banshen0201的博客 167

蓝桥杯刷题-05-子串简写-暴力

【代码】蓝桥杯刷题-05-子串简写-暴力。

weixin_45780075的博客 458

蓝桥杯‘子串简写’题别再用暴力了!手把手教你二分优化,效率提升百倍

本文详细解析了蓝桥杯‘子串简写’题的优化解法,从暴力枚举到二分查找的思维跃迁。通过预处理和二分优化,时间复杂度从O(n²)降至O(n log m),效率提升百倍。文章包含完整代码实现、复杂度分析和调试技巧,帮助参赛者掌握高效算法设计。

weixin_42549451的博客 198

CodeM美团点评编程大赛初赛B轮 E.子串【暴力模拟+KMP】水题

[编程|1500分] 子串 时间限制:3秒 空间限制:32768K 题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。

mengxiang000000 1015

CodeM美团点评B轮:子串(E题) Java暴力解决

给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。  输入描述: 第一行一个整数n(1 ≤ n ≤ 50,000)。 第二行一个字符串t(长度 ≤ 1,000,0

Mike_CSU的博客 640
上一篇: 水模拟题:连号区间数
下一篇: Java-强制类型转换
21RGHLY
博客等级 码龄5年 44粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21RGHLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值