华为OD机试2024年C卷D卷 - 构成指定长度字符串的个数/字符串拼接(Java)

华为OD机试(C卷+D卷)2024真题目录

题目描述:构成指定长度字符串的个数 (本题分值200)

给定 M(0 < M ≤ 30)个字符(a-z),从中取出任意字符(每个字符只能用一次)拼接成长度为 N(0 < N ≤ 5)的字符串,

要求相同的字符不能相邻,计算出给定的字符列表能拼接出多少种满足条件的字符串,

输入非法或者无法拼接出满足条件的字符串则返回0。

输入描述

给定的字符列表和结果字符串长度,中间使用空格(" ")拼接

输出描述

满足条件的字符串个数

示例1

输入

aab 2

输出

2

说明: 只能构成ab,ba。

示例2

输入

abc 2

输出

6

说明: 可以构成:ab ac ba bc ca cb 。

解题思路:

对全排列去重,并且相邻元素不同。

去重策略:
如果当前轮次当前层选择的元素 和 之前轮次该层选择的元素的值相同,那么就可以终止当前轮次的当前分支的后续探索,因此必然会产生重复。
示例图:
在这里插入图片描述
在这里插入图片描述
此时可以通过预处理,对元素进行排序,确保相同元素相邻,再进行递归全排列就只需跟前一子树比较判断,而无需全部比较。

Java代码

import java.util.*;public class Main {static String s;static int n;public static void main(String[] args) {Scanner sc = new Scanner(System.in);s = sc.next();n = sc.nextInt();if (s.length() < n) {// 无法拼接出满足条件的字符串return 0;}char[] cArr = s.toCharArray();for (char c : cArr) {// 输入非法if (c < 'a' || c > 'z') return 0;}// 排序cArr,可以方便后面求解全排列时,进行树层去重Arrays.sort(cArr);System.out.println(dfs(cArr, -1, 0, new boolean[cArr.length], 0));}/*** 全排列求解** @param cArr 基于cArr数组求解全排列* @param pre 排列最后一个字符在cArr中的位置* @param level 排列的长度* @param used used[i] 用于标记 cArr[i] 元素是否已使用* @param count 符号要求的排列有几个* @return count*/public static int dfs(char[] cArr, int pre, int level, boolean[] used, int count) {// 当排列长度到达n,则是一个符合要求的排列if (level == n) {// 符合要求的排列个数+1return ++count;}for (int i = 0; i < cArr.length; i++) {// 每个字符只能用一次if (used[i]) continue;// 相同的字符不能相邻, pre指向前面一个被选择的字符的在cArr中的位置,i指向当前被选择的字符在cArr中的位置if (pre >= 0 && cArr[i] == cArr[pre]) continue;// 树层去重(去除重复排列)if (i > 0 && cArr[i] == cArr[i - 1] && !used[i - 1]) continue;used[i] = true;count = dfs(cArr, i, level + 1, used, count);used[i] = false;}return count;}
}

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

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

相关文章

科普文:银行信贷系统概叙

信贷业务流程 资金需求者提交申请&#xff1a;资金需求者通过不同渠道&#xff08;如APP、网站、门店等&#xff09;提交贷款申请。 系统交互完成审批&#xff1a;系统通过自动化和人工相结合的方式&#xff0c;对贷款申请进行初步筛选和审批。 系统交互完成策略判断&#xf…

rsync文件远程同步

目录 一、什么是rsync远程同步 二、实操rsync远程文件同步 1、配置rsync同步源 2、客户端部署 3、增量备份​编辑 4、删除文件 5、如何实现免交互登录 6、crontab rsync 实现定时同步 7、使用ssh实现rsync数据同步【☆】 如何使用ssh免交互实现数据同步&#xff1f;…

Golang | Leetcode Golang题解之第260题只出现一次的数字III

题目&#xff1a; 题解&#xff1a; func singleNumber(nums []int) []int {xorSum : 0for _, num : range nums {xorSum ^ num}lsb : xorSum & -xorSumtype1, type2 : 0, 0for _, num : range nums {if num&lsb > 0 {type1 ^ num} else {type2 ^ num}}return []in…

【深度学习入门篇 ⑨】循环神经网络实战

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

【一刷《剑指Offer》】面试题 48:不能被继承的类

《剑指Offer》对应内容&#xff1a; 可参考&#xff1a; 【C】继承 -- 详解_c,两个派生类继承一个基类,声明对象的时候用基类的对象。-CSDN博客

每日OJ_牛客_WY33 计算糖果

目录 牛客_WY33 计算糖果 解析代码 牛客_WY33 计算糖果 计算糖果_牛客题霸_牛客网 解析代码 A - B aB - C bA B cB C d 这道题目的实质是&#xff1a;判断三元一次方程组是否有解及求解&#xff0c; 13可以得到A(ac)/2&#xff1b;4-2可以得到C(d-b)/2; 24可以得到B2…

WebGSI地图切片|栅格地图切片原理|地图矢量切片原理

介绍 图栅格切片是WebGIS中使用的一种新技术&#xff0c;通过地图栅格切片可以有效缩短服务器的地图生成时间和地图传输时间&#xff0c;提高系统的响应速度。 地图切片是在多个比例尺下配置地图&#xff0c;预先将每个比例尺下的地图绘制成小图片&#xff0c;保存到服务器上一…

Python 爬虫实战----3(实力展现)

实战&#xff1a;获取豆瓣电影top250的电影名字 1.获取url&#xff1a;打开网站按发f12&#xff0c;点击网络&#xff0c;刷新找到第一个截取url和User-Agent。 2.请求爬取数据 mport requests import fake_useragent from lxml import etree import re #UA head {"User…

Android AutoSize屏幕适配:适配不同屏幕大小的尺寸,让我们无需去建立多个尺寸资源文件

目录 AutoSize是什么 AutoSize如何使用 一、AndroidautoSize是什么 在开发产品的时候&#xff0c;我们会遇到各种各样尺寸的屏幕&#xff0c;如果只使用一种尺寸去定义控件、文字的大小&#xff0c;那么到时候改起来就头皮发麻。以前使用dime的各种类库&#xff0c;文件太多…

Spark调优特殊case- Task倾斜

首先我们观察下上面的stage5, Task MaxTime2.4Min, 但是stage5的整体耗时竟然可以达到55Min, 其实分区1000&#xff0c; 300个executor&#xff0c; 按照最大的TaskTime2.4Min来估算所有Task运行完成时间, 那么时间应该是- 2.4Min * 3 2.4Min 9.6Min 也就是最慢也就跑10分钟就…

C++ | Leetcode C++题解之第274题H指数

题目&#xff1a; 题解&#xff1a; class Solution { public:int hIndex(vector<int>& citations) {int left0,rightcitations.size();int mid0,cnt0;while(left<right){// 1 防止死循环mid(leftright1)>>1;cnt0;for(int i0;i<citations.size();i){if(…

Kubernetes集群安装步骤

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、安装要求 在开始之前&#xff0c;部署Kubernetes集群集群需要满足以下几个条件&#xff1a; 一台多多台机器&#xff0c;操作系统CentOS.x-86_x…

数据结构——栈(顺序结构)

一、栈的定义 栈是一种数据结构&#xff0c;它是一种只能在一端进行插入和删除操作的特殊线性表。这一端被称为栈顶&#xff0c;另一端被称为栈底。栈按照后进先出&#xff08;LIFO&#xff09;的原则进行操作&#xff08;类似与手枪装弹后射出子弹的顺序&#xff09;。在计算…

服务攻防-应用协议cve

Cve-2015-3306 背景&#xff1a; ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行&#xff0c;…

配置web服务器

当访问网站www.haha.com时显示&#xff1a;haha&#xff1b;当访问网站www.xixi.com/secret/显示&#xff1a;this is secret 第一步&#xff0c;配置一个新的IP 确认后 esc返回 第二步&#xff1a;重启ens160 第三步&#xff1a;创建目录&#xff0c;并且在文件内写入内容 第…

【b站/哔哩哔哩/bilibili】视频缓冲慢的解决方法

最近我的b站视频缓冲很慢&#xff0c;加载速度只有100多kb/s。这导致视频加载非常慢&#xff0c;看几秒就卡很久&#xff0c;有时候甚至黑屏。 据某些b站网友研究&#xff0c;b站存在如下问题&#xff1a;相关动态 “2.更改网络协议。是的&#xff0c;你没看错&#xff0c;转了…

Unity UGUI 之 Toggle

​本文仅作学习笔记与交流&#xff0c;不作任何商业用途本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正​ 1.什么是Toggle&#xff1f; Unity - Manual: Toggle 带复选框的开关&#xff0c;可…

【Unity】Android Failed to transform Error while dexing.

文章目录 一、背景二、问题描述三、原因和解决方法 一、背景 1、Unity 2021.3.33f1 2、Firebase 11.7.0 3、升级至API-34 二、问题描述 错误信息 Failed to transform play-services-measurement-api-21.5.0.aar (com.google.android.gms:play-services-measurement-api:21.5.…

算法力扣刷题记录 五十六【501.二叉搜索树中的众数】

前言 二叉搜索树操作&#xff0c;继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;…

【Socket编程】基于TCP协议实现客户端与服务端的通信

前言 由于TCP是面向连接的&#xff0c;所以在创建套接字之后还需要进入监听状态&#xff0c;监听状态下可以获取客户端的请求。获得请求之后&#xff0c;服务器需要接受连接&#xff0c;之后再处理事务。 实现服务端具体步骤 总的来说&#xff0c;TCP服务端主要实现以下步骤…