【百日冲大厂】第二十篇,牛客网选择题+编程题 字符串反转+公共子串计算(dp问题)

news2024/10/7 12:17:32

前言:

  • 大家好,我是良辰丫,第二十篇,牛客网选择题+编程题 字符串反转+公共子串计算(dp问题).💞💞💞
  • 生活就像一只盲盒,藏着意想不到的辛苦,当然也有万般惊喜的可能。不管是次次都如愿以偿,还是赢面寥寥无几,终究起起伏伏才是常态。我们既有过顺遂,也难免绝望,但若一陷入困境就立即抽身而退,那就再也没有翻盘的可能。只要生活还在继续,就有赢的可能。

🧑个人主页:良辰针不戳
📖所属专栏:百日冲大厂
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。

在这里插入图片描述

目录

  • 1. 选择题
  • 2. 编程题
    • 2.1 字符串反转
    • 2.2 公共子串计算

1. 选择题

在这里插入图片描述

  • 顺序存储的底层是数组.
  • 数组可以根据下标快速定位元素,时间复杂度为O(1).
  • 在某个地方增加节点的时候,得移动该位置后面的所有元素,因此时间复杂度为O(n)

在这里插入图片描述

  • top[i]表示第i个栈的栈顶,因此top[1]表示第一个栈的栈顶在这里插入图片描述
  • 第一个栈存元素从左开始,第二个栈存元素从右开始.
  • 当数组没有存储空间的时候,元素就会满,此时两个栈的栈顶元素相邻,那么top[1]+1 = top[2]说明栈满了.

在这里插入图片描述

D中栈和队列的插入时间复杂度都是O(1).
在这里插入图片描述

  • 这道题容易混淆的是回溯与递归.
  • 递归是我们刚学代码基本就接触了,我们把函数自己调用自己的方式叫做递归,题目中老和尚给小和尚讲故事,就是重复同一件事情,因此我们可以把它看做递归.(但是递归往往有结束条件哈)
  • 回溯经常用在深搜中,我们把回溯看做试探法,可以想象成迷宫探路,这条路走不通,返回去走下一条路.

在这里插入图片描述

n0 = n2 + 1;

在这里插入图片描述

前序遍历是根左右,中序遍历是左根右,二者遍历序列相同,那么没有左孩子,因此该二叉树为右单枝.

在这里插入图片描述

画图求解即可

在这里插入图片描述
在这里插入图片描述

这组数据接近排列后的数据,此时采用冒泡排序的方式比较快,因为冒泡排序在排列的时候发现数据没有交换的时候,它就已经有序了,跳出循环.

在这里插入图片描述

  • 线性结构表示一对一.
  • 树和图是非线性结构.

2. 编程题

2.1 字符串反转

做题链接:
链接: 字符串反转

题目描述:

在这里插入图片描述

题目分析:

  • 一看到字符串翻转我们就会想到双指针算法,一前一后交换元素.
  • 代码比较简单,具体细节在代码中体现.
  • 但是在这里我们解锁一个新知识,这里的结果要打印一个字符串,ch是一个字符数组,我们直接打印ch也可以,不用做无谓的转换.
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] ch = str.toCharArray();
        int left = 0;
        int right = str.length()-1;
        while(left < right){
            char temp = ch[left];
            ch[left] = ch[right];
            ch[right] = temp;
            left++;
            right--;
        }
        //1. 第一种方式
        // String str2 = new String(ch);
        // System.out.println(str2);
        //2. 第二种方式,ch是字符数组,但是也能这样使用
        System.out.println(ch);
    }
}

2.2 公共子串计算

做题链接:
链接: 公共子串计算

题目描述:

在这里插入图片描述

题目分析:
哎呦喂,又到了惊心动魄的动态规划题了,不要害怕,dp没有大家想的那么难,多做题多总结.

  • 状态 : f(i,j) 表示a字符串以第 i 个字符结尾的串和b字符串以第 j 个字符结尾的串的最大公共子串的长度.
  • 状态转移方程,如果a字符串的第 i 个字符与b字符串的第 j 个字符相同的时候f[i][j] = f[i-1 ][j-1 ] + 1,否则f[i][j] = 0.
  • 返回值是最大公共子串的长度,我们只需要通过一个变量记录即可.

下面两种方式的代码都可以.

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.next();
        String str2 = in.next();
        char[] arr1 = new char[310];
        for(int i = 1;i<=str1.length();i++){
            arr1[i] = str1.charAt(i-1);
        }
        char[] arr2 = new char[160];
        for(int i = 1;i<=str2.length();i++){
            arr2[i] = str2.charAt(i-1);
        }
        int[][] f = new int[160][160];
        // int begin = 0;
         int len = 0;
        //System.out.println(Arrays.toString(arr2));
        for (int i = 1; i <= str1.length(); i++) {
            for (int j = 1; j <= str2.length(); j++) {
                //f[i][j] = Math.max(f[i-1][j],f[i][j-1]);
                if (arr1[i] == arr2[j ]) {
                    f[i][j] = f[i-1 ][j-1 ] + 1;
                    
                } else{
                    f[i][j] = 0;
                }
                len = Math.max(f[i][j],len);
            }
        }
        //String str3 = str1.substring(start,start+maxLen);
        System.out.println(len);
    }
}
import java.io.*;
import java.util.*;
public class Main
{
    public static int getMaxLen(String str1, String str2)
    {
        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();
        int len1 = arr1.length;
        int len2 = arr2.length;
        int[][] maxSubLen = new int[len1 + 1][len2 + 1];
        int maxLen = 0;
        for(int i = 1; i <= len1; ++i)
        {
            for(int j = 1; j <= len2; ++j)
            {
                if(arr1[i - 1] == arr2[j - 1])
                {
					//F(i,j) = F(i - 1, j - 1) + 1
                    maxSubLen[i][j] = maxSubLen[i - 1][j - 1] + 1;
					//更新最大值
                    if(maxLen < maxSubLen[i][j])
                    {
                        maxLen = maxSubLen[i][j];
                    }
                }
            }
        }
        return maxLen;
    }
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String str1;
        String str2;
        while((str1 = reader.readLine()) != null)
        {
            str2 = reader.readLine();
            System.out.println(getMaxLen(str1, str2));
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学者一步步学习python 学习提纲

当学习Python时&#xff0c;可以按照以下提纲逐步学习&#xff1a; 入门基础 了解Python的历史和应用领域安装Python解释器和开发环境&#xff08;如Anaconda、IDLE等&#xff09;学习使用Python的交互式解释器或集成开发环境&#xff08;IDE&#xff09;进行简单的代码编写和…

浅谈C++下观察者模式的实现

为什么要有观察者模式 想象一个场景&#xff0c;有一只猫和一群老鼠&#xff0c;当猫出现的时候&#xff0c;每一只老鼠都要逃跑 用最简单的方法实现一个去模拟这一个过程 #include<iostream>class Mouse_1 {public:void CatCome(){std::cout<<"Mouse_1 Ru…

【MyBatis-Plus】DQL编程控制

1&#xff0c;DQL编程控制 增删改查四个操作中&#xff0c;查询是非常重要的也是非常复杂的操作&#xff0c;这块需要我们重点学习下&#xff0c;这节我们主要学习的内容有: 条件查询方式查询投影查询条件设定字段映射与表名映射 1. 条件查询 1. 条件查询的类 MyBatisPlus…

PHP 训练成绩管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 训练成绩管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库 为mysql5.0&#xff0c;使用php语言开发。 …

css设计表格圆角最简单的方法

代码如下&#xff1a; table {width: 100%;/* border-collapse: collapse; */background-color: #FBFBFB; /* 背景颜色; */border-collapse: separate; /* 让border-radius有效 */border-spacing: 0; /*表格中每个格边距设为0*/border: 1px solid #DFDFDF;/*边框*/border-radi…

软件测试面试简历,三年测试项目经验怎么写?

作为三年左右的测试工程师&#xff0c;简历上有五六个项目经历很正常&#xff0c;那如何设计这几个项目&#xff0c;其实设计好三两个就行&#xff0c;面试官能关注到的也只有最新的三两个&#xff0c;两年前的项目也没有关注的必要啦&#xff0c;所以在这两三个项目中一定要体…

mysql8.0 navicat mysql 2059报错

进入mysql安装目录&#xff1a; 输入用户名密码连接mysql 设置密码 刷新 测试连接&#xff0c;连接成功

如何保障业务稳定性?一文详解蚂蚁业务智能可观测平台BOS

随着业务规模的不断扩大以及AI、云计算、大数据等技术的不断发展&#xff0c;大量的企业希望利用上云来加速其数字化转型&#xff0c;全面提升可靠性、安全性和灵活性&#xff0c;并且降低运营成本。 不过对于大多数企业来说&#xff0c;全面上云是一项颇具难度的挑战。这里面…

阿里图标库中图标的下载使用

一 iconfont-阿里巴巴矢量图标库 进去找到你想要的图标 二 点这个 三 点这个 点这个 新建自己的项目 选择这个点下载 解压出来&#xff0c;除了两个demo不要都添加到你的代码中的文件夹保存 四 main.js中全局导入 import ./xxxx/xxxx/iconfont.css 五 页面使用 <…

2 数据类型

数据类型分为基本数据类型和引用数据类型。 基本数据类型有&#xff1a;byte、int、short、long、float、double、char、boolean。占用多少字节&#xff0c;如下表所示。1个字节是8位。

Java面试题【3】

Java面试题——简答题部分 文章目录 Java面试题——简答题部分1.列举几个常用的集合类并指出特点2.Set里的元素是不能重复的&#xff0c;那么用什么方法来区分重复与否呢&#xff0c;是还是equals()&#xff0c;有何区别&#xff1f;3.请描述线程的生命状态&#xff0c;并描述s…

简单分享下怎么创建一个微信小程序

怎么创建一个微信小程序?三招教你这样做!!微信小程序不会做没关系,看我这篇文章就够啦!!实现0基础到大神的瞬间飞跃不是梦!! 戳下方链接即可直达官网&#xff0c;上千种行业精美模板任君挑选&#xff0c;快一起来试试吧&#xff01;让小程序制作不再困难&#xff01;上千个行业…

吉瑞外买项目

目录 1、软件开发整体介绍 软件开发流程 角色分工 软件环境 2、瑞奇外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 3、环境搭建 数据库环境搭建 maven项目搭建 4、后台登录功能开发 需求分析 代码开发 5、后台退出功能开发 第一天 1、软件开发整…

ModaHub魔搭社区:腾讯云定义AI Native向量数据库

大模型时代的到来&#xff0c;拥抱大模型成为企业的刚需。 向量数据库通过把数据向量化然后进行存储和查询&#xff0c;可以极大地提升效率和降低成本。它能解决大模型预训练成本高、没有“长期记忆”、知识更新不足、提示词工程复杂等问题&#xff0c;突破大模型在时间和空间…

12.2 ARM处理器概论

目录 ARM处理器概述 ARM公司概述 ARM的含义 ARM公司 ARM产品系列 早先经典处理器 Cortex-A系列 Cortex-R系列 Cortex-M系列 RISC处理器 RISC处理器&#xff08;精简指令集处理器&#xff09; CISC处理器&#xff08;复杂指令集处理器&#xff09; ARM指令集概述 …

MQTT协议原理介绍及如何使用emqx

MQTT协议原理介绍及如何使用emqx 什么是MQTT协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议是一种轻量级的、基于发布/订阅模式的通信协议。它最初由IBM开发&#xff0c;用于在低带宽和不稳定的网络环境中传输小型数据包。MQTT协议被广泛应用于物…

二叉树题目:对称二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;对称二叉树 出处&#xff1a;101. 对称二叉树 难度 3 级 题目描述 要求 给你一个二叉树的根结点 root \t…

Linux的编译器——gcc/g++(预处理、编译、汇编、链接)

文章目录 一.程序实现的两个环境二.gcc如何完成1.预处理2.编译3.汇编4.链接 三.动态库与静态库对比下二者生成的文件大小 四.gcc常用选项 前言&#xff1a; 本文主要认识与学习Linux环境下常用的编译器——gcc&#xff08;编译C代码&#xff09;/g&#xff08;编译C代码&#x…

ECharts社区 合集整理

1、PPChart 地址&#xff1a;http://ppchart.com/#/ 2、DataInsight 地址&#xff1a;http://chartlib.datains.cn/echarts 3、isqqw 地址&#xff1a;https://www.isqqw.com/ 4、makeapie 地址&#xff1a;https://www.makeapie.cn/echarts 5、Chart.Top 地址: http://chart.…

【二维属性+贪心+双指针】Wannafly 挑战赛15 A

Wannafly挑战赛15_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 经典中的经典中的经典 还是一样双指针把可行解放入DS中&#xff0c;然后求最优解 值得注意的是&#xff0c;我们说的双指针的单调性&#xff0c…