Java每日一练(20230415)

news2024/9/24 11:23:55

目录

1. 扰乱字符串  🌟🌟🌟

2. 单词拆分  🌟🌟

3. 模拟计算器  ※

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 扰乱字符串

使用下面描述的算法可以扰乱字符串 s 得到字符串 t :

  1. 如果字符串的长度为 1 ,算法停止
  2. 如果字符串的长度 > 1 ,执行下述步骤:
    • 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,则可以将其分成两个子字符串 x 和 y ,且满足 s = x + y 。
    • 随机 决定是要「交换两个子字符串」还是要「保持这两个子字符串的顺序不变」。即,在执行这一步骤之后,s 可能是 s = x + y 或者 s = y + x 。
    • 在 x 和 y 这两个子字符串上继续从步骤 1 开始递归执行此算法。

给你两个 长度相等 的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:s1 = "great", s2 = "rgeat"
输出:true
解释:s1 上可能发生的一种情形是:
"great" --> "gr/eat" // 在一个随机下标处分割得到两个子字符串
"gr/eat" --> "gr/eat" // 随机决定:「保持这两个子字符串的顺序不变」
"gr/eat" --> "g/r / e/at" // 在子字符串上递归执行此算法。两个子字符串分别在随机下标处进行一轮分割
"g/r / e/at" --> "r/g / e/at" // 随机决定:第一组「交换两个子字符串」,第二组「保持这两个子字符串的顺序不变」
"r/g / e/at" --> "r/g / e/ a/t" // 继续递归执行此算法,将 "at" 分割得到 "a/t"
"r/g / e/ a/t" --> "r/g / e/ a/t" // 随机决定:「保持这两个子字符串的顺序不变」
算法终止,结果字符串和 s2 相同,都是 "rgeat"
这是一种能够扰乱 s1 得到 s2 的情形,可以认为 s2 是 s1 的扰乱字符串,返回 true

示例 2:

输入:s1 = "abcde", s2 = "caebd"
输出:false

示例 3:

输入:s1 = "a", s2 = "a"
输出:true

提示:

  • s1.length == s2.length
  • 1 <= s1.length <= 30
  • s1 和 s2 由小写英文字母组成

以下程序实现了这一功能,请你填补空白处内容:

```c++
class Solution {
    public boolean isScramble(String s1, String s2) {
        if (s1.length() == 0 && s2.length() == 0)
            return true;
        if (s1.length() != s2.length())
            return false;
        return dfs(s1.toCharArray(), s2.toCharArray(), 0, 0, s1.length());
    }
    private boolean dfs(char[] s1, char[] s2, int start1, int start2, int len) {
        if (len == 1) {
            return s1[start1] == s2[start2];
        }
        if (!equals(s1, s2, start1, start2, len)) {
            return false;
        }
        for (int i = 1; i < len; i++) {
            ____________________;
        }
        return false;
    }
    public boolean equals(char[] s1, char[] s2, int start1, int start2, int len) {
        int[] charArr = new int[26];
        for (int i = 0; i < len; i++) {
            charArr[s1[start1 + i] - 'a']++;
            charArr[s2[start2 + i] - 'a']--;
        }
        for (int item : charArr) {
            if (item != 0)
                return false;
        }
        return true;
    }
}
```

出处:

https://edu.csdn.net/practice/25658360

代码:

import java.util.*;
public class isScramble {
    public static class Solution {
        public boolean isScramble(String s1, String s2) {
            if (s1.length() == 0 && s2.length() == 0)
                return true;
            if (s1.length() != s2.length())
                return false;
            return dfs(s1.toCharArray(), s2.toCharArray(), 0, 0, s1.length());
        }
        private boolean dfs(char[] s1, char[] s2, int start1, int start2, int len) {
            if (len == 1) {
                return s1[start1] == s2[start2];
            }
            if (!equals(s1, s2, start1, start2, len)) {
                return false;
            }
            for (int i = 1; i < len; i++) {
                if (dfs(s1, s2, start1, start2, i) && dfs(s1, s2, start1 + i, start2 + i, len - i))
                    return true;
                if (dfs(s1, s2, start1, start2 + len - i, i) && dfs(s1, s2, start1 + i, start2, len - i))
                    return true;
            }
            return false;
        }
        public boolean equals(char[] s1, char[] s2, int start1, int start2, int len) {
            int[] charArr = new int[26];
            for (int i = 0; i < len; i++) {
                charArr[s1[start1 + i] - 'a']++;
                charArr[s2[start2 + i] - 'a']--;
            }
            for (int item : charArr) {
                if (item != 0)
                    return false;
            }
            return true;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        String s1 = "great", s2 = "rgeat";
        System.out.println(s.isScramble(s1, s2));
        s1 = "abcde"; s2 = "caebd";
        System.out.println(s.isScramble(s1, s2));
        s1 = "a"; s2 = "a";
        System.out.println(s.isScramble(s1, s2));
    }
}

输出:

true
false
true


2. 单词拆分

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

  • 拆分时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
     注意你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

出处:

https://edu.csdn.net/practice/25658361

代码:

import java.util.*;
public class wordBreak {
    public static class Solution {
        public boolean wordBreak(String s, List<String> wordDict) {
            int length = s.length();
            int size = wordDict.size();
            if (length == 0) {
                return true;
            }
            if (size == 0) {
                return false;
            }
            boolean[] dp = new boolean[length];
            for (int i = 0; i < length; i++) {
                for (int j = 0; j < size; j++) {
                    String now = wordDict.get(j);
                    if (i < now.length()) {
                        String test = s.substring(0, i + 1);
                        if (now.equals(test)) {
                            dp[i] = true;
                            break;
                        }
                    }
                    if (i >= now.length()) {
                        String test = s.substring(i - now.length() + 1, i + 1);
                        if (dp[i - now.length()] && test.equals(now)) {
                            dp[i] = true;
                            break;
                        }
                    }
                }
            }
            return dp[length - 1];
        }
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        String[] str1 = {"leet", "code"};  
        List<String> wordDict = new ArrayList<>(Arrays.asList(str1));
        String s = "leetcode";
        System.out.println(sol.wordBreak(s, wordDict));
        String[] str2 = {"apple", "pen"};
        s = "applepenapple";
        wordDict = new ArrayList<>(Arrays.asList(str2));
        System.out.println(sol.wordBreak(s, wordDict));
        String[] str3 = {"cats", "dog", "sand", "and", "cat"};
        s = "catsandog";
        wordDict = new ArrayList<>(Arrays.asList(str3));
        System.out.println(sol.wordBreak(s, wordDict));
    }
}

输出:

true
true
false


3. 模拟计算器

要求:
(1)定义名为Number的类,在其中定义两个私有的整型数据成员n1和n2;
(2)在Number类中编写构造方法,赋予n1和n2初始值;
(3)再为Number类定义加(addition)、减(subtration)、乘(multiplication)、除(division)四个公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。注意:除法运算时要抛出除数为0的异常;
(4)在主方法中创建Number类的对象,调用上述各个方法,测试并输出计算结果,注意进行必要的异常捕获与处理。

出处:

https://edu.csdn.net/practice/25658362

代码:

public class Number {
    private int n1;
    private int n2;
    public Number(int n1, int n2) {
        this.n1 = n1;
        this.n2 = n2;
    }
    public int addition() {
        return n1 + n2;
    }
    public int subtration() {
        return n1 - n2;
    }
    public int multiplication() {
        return n1 * n2;
    }
    private int division() {
        if (n2 == 0) {
            throw new IllegalArgumentException("除数参数不合法");
        }
        return n1 / n2;
    }
    public static void main(String[] args) {
        Number number = new Number(6, 0);
        System.out.println(number.addition());
        System.out.println(number.subtration());
        System.out.println(number.multiplication());
        try {
            System.out.println(number.division());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

输出:


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

Improved Knowledge Distillation via Teacher Assistant小陈读paper系列

算是经典了吧哈哈 1.他们发现了学生性能下降了&#xff0c;什么时候呢&#xff1f;就是老师模型和学生模型差的太多的时候有了很大gap&#xff08;一个学生不能请一个维度跨越巨大的老师&#xff09;&#xff08;老师可以有效地将其知识转移到一定大小的学生&#xff0c;而不是…

Java导入导出

目录前端Apache POI引依赖导入导出工具类EasyExcel引依赖读Excel指定列名多个Sheet使用提供的转换器或自定义格式转换器对读取到的数据进行格式转换行头即列名写Excel指定导出列复杂头写入日期、数字或自定义格式转换对导出数据进行处理自定义样式合并单元格动态列表头自定义拦…

关于el-input-number 计数器 只能点击一次,之后点击没有效果

哈喽 大家好啊&#xff0c;今天使用计数器发现&#xff0c;点击一次了后就显示不了了 这里怎么点击都点击不了&#xff0c;只能点击一次 然后我发现我代码是这样写的&#xff1a; gitem是一个对象 gitem.saleNum gitem.reduceQuantity || 1;// 剩余可以编辑的数量 因为我这…

【SSL】ssl证书简介、ssl证书生成工具与ssl证书生成步骤

ssl证书简介、ssl证书生成工具与ssl证书生成步骤一、ssl证书是什么&#xff1f;二、ssl证书生成工具有哪些&#xff1f;2.1、工具一&#xff1a;CFSSL2.2、工具二&#xff1a;OpenSSL2.3、工具三&#xff1a;XCA三、ssl证书有什么用&#xff1f;四、ssl证书生成步骤4.1 步骤1&a…

01-SpringBoot入门应用

入门程序&#xff1a;使用SpringBoot开发一个web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串“Hello World ~” 1. 创建springboot工程&#xff0c;并勾选web开发相关依赖 由于我的idea没有Spring Initializr选项&#xff0c;所以我选择使用Maven…

ChatGPT常见术语清单;大厂ChatGPT混战汇总;提示工程技巧完全指南(中译);真机会VS假机会 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『OpenAI/ChatGPT 高频常见词解释清单』一份速查表搞懂最热门 AI 术语 OpenAI 和 ChatGPT 的爆火&#xff0c;以超高的频率将大量AI术…

ISE的仿真库编译步骤

Modelsim10.4与ISE14.7联合仿真 1、指定modelsim的安装位置 2、编译安装仿真库 &#xff08;1&#xff09;编译仿真库 点击“开始菜单 -> Xilinx ISE Design Suite 13.2 -> ISE Design Tools -> 64-bit Tools -> Simulation Library Compilation Wizard”&#xff…

Node 会话控制

文章目录Node 会话控制概述cookie运行流程设置cookie获取cookie删除cookiesession运行流程设置session获取session删除sessionsession和cookie的区别token运行流程JWT创建token校验tokenNode 会话控制 概述 所谓会话控制就是 对会话进行控制。 HTTP 是一种无状态的协议&…

DAY 38 LINUX iptables防火墙

所谓防火墙也称之为防护墙&#xff0c;它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统。按照给定的规则&#xff0c;允许或者限制网络报文通过 硬件防⽕墙&#xff1a;通过硬件和软件的组合&#xff0c;基于硬件的防⽕墙保护整个内部网络安全。&a…

如何使用Win10搭建我的世界Minecraft服务器

简单几步在windwos搭建我的世界服务器,并通过cpolar工具将本地服务暴露到公网连接 1. Java环境搭建 以windows10系统为例&#xff0c;配置java环境&#xff0c;搭建我的世界服务器,下载最新版java版本 Java Downloads | Oracle 选择exe文件&#xff0c;下载完成后双击安装包…

JVM程序计数器到底存储的是当前执行的指令地址,还是下一条指令的地址

JVM程序计数器到底存储的是当前执行的指令地址&#xff0c;还是下一条指令的地址&#xff1f; 说法一&#xff1a;chatgpt 程序计数器&#xff08;Program Counter&#xff0c;PC&#xff09;存储的是下一条指令的地址。在CPU执行指令时&#xff0c;程序计数器始终跟踪着当前已…

【机器人仿真Webots教程】-Webots安装

Webots安装 文章目录Webots安装1. Webots简介2. Webots安装2.1 系统要求2.2 验证显卡驱动2.3 安装3. Webots仿真3.1 world文件3.2 Controller文件3.3 Supervisor Controller4. 启动方式1. Webots简介 webots是一个开源3D移动机器人仿真框架。其为Cyberbotics公司旗下研发开源框…

Fastjson反序列化漏洞复现(实战案例)

本文转载于&#xff1a;https://blog.csdn.net/jinzezhi/article/details/124274123 漏洞介绍 FastJson在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。通过查找代码中相关的方法&#xff0c;即可构造出…

【Python_Opencv图像处理框架】图像基本操作+90bb5729-b33a-4e82-a0d9-faa3e5cbf621

写在前面 很幸运能选择Python语言进行学习&#xff0c;这是有关Opencv的图像处理的第一篇文章&#xff0c;讲解了有关图像处理的一些基础操作&#xff0c;作为初学者&#xff0c;我尽己所能&#xff0c;但仍会存在疏漏的地方&#xff0c;希望各位看官不吝指正❤️ 写在中间 1…

unity物体运动经过特定点并绘出轨迹

经过线如果有圆滑可以参考 Unity物体运动时画出轨迹_天人合一peng的博客-CSDN博客 并修改里面的数值轨迹会有变化 float angle Mathf.Min(1, Vector3.Distance(this.transform.position, targetPos) / distanceToTarget) * 45; this.transform.rotation this.t…

App灰度发布实现路径之小程序容器

灰度从字面意思理解就是存在于黑与白之间的一个平滑过渡的区域&#xff0c;所以说对于互联网产品来说&#xff0c;上线和未上线就是黑与白之分&#xff0c;而实现未上线功能平稳过渡的一种方式就叫做灰度发布。 灰度发布将新版本应用程序推送给一部分用户进行测试和反馈的过程…

7、ThingsBoard使用docker compose集群部署

1、概述 今天我将讲解官方文档说的使用docker compose集群部署ThingsBoard,这种部署方式也是目前企业中常用的形式,希望大家能够掌握,我不是直接使用官方的镜像,我是自己拉起代码,然后自己构建镜像,在传到服务器上,使用自己的镜像来部署。而且这种部署中间有个大坑,我…

【大数据Hadoop】HDFS3.3.1-Namenode-缓存管理

缓存管理前言缓存概念HDFS 集中式缓存有两个主要概念。缓存管理命令HDFS 集中式缓存架构CacheManager 类实现CacheReplicationMonitor前言 Hadoop 2.3.0 版本新增了集中式缓存管理&#xff08;Centralized Cache Management&#xff09;功能&#xff0c;允许用户将一些文件和目…

数字滤波器设计——FIR 滤波器

数字滤波器设计实践介绍 此示例说明如何使用 Signal Processing Toolbox 产品中的 designfilt 函数&#xff0c;根据频率响应设定设计 FIR 和 IIR 滤波器。该示例重点讲述低通滤波器&#xff0c;但大多数结果也适用于其他响应类型。 此示例主要介绍数字滤波器的设计&#xff…

MATLAB | 如何用MATLAB如何绘制各式各样精致的三元相图(ternary plot)

整了个大活&#xff0c;写了一个能够生成非常精致三元相图的函数&#xff0c;这种图主要用于展示三种变量之间的比例&#xff0c;本期实验绘制效果如下&#xff1a; 编写不易&#xff0c;这个工具写的脑壳痛&#xff0c;求多多点赞&#xff0c;依旧先介绍咋使用&#xff0c;工具…