有重复字符串的排列组合

news2024/11/24 5:06:53

题目链接

有重复字符串的排列组合

题目描述

注意点

  • 字符都是英文字母
  • 字符串长度在[1, 9]之间

解答思路

  • 本题与无重复字符串的排列组合类似,区别是字符串中有重复字符,所以组合数量不会是固定的n * (n - 1) * (n - 2) * … * 1
  • 首先想到的仍然是深度优先遍历,区别是结果集中同一个位置相同的字符只能添加一次(字符可能在s的不同位置),所以可以使用map存储每个字符和字符的出现次数,对每个位置需要加入的字符可以遍历map的key集合,每个位置能否加入字符c可以根据上一次dfs传入的map.get©判断是否还有剩余的c可以使用

代码

class Solution {
    int n;
    public String[] permutation(String s) {
        n = s.length();
        List<String> list = new ArrayList<>();
        Map<Character, Integer> map = new HashMap<>();
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        dfs(s, 0, map, new StringBuilder(), list);
        return list.toArray(new String[list.size()]);
    }

    public void dfs(String s, int depth, Map<Character, Integer> map, StringBuilder sonRes, List<String> list) {
        if (depth >= n) {
            list.add(sonRes.toString());
            return;
        }
        for (Character c : map.keySet()) {
            if (map.get(c) == 0) {
                continue;
            }
            sonRes.append(c);
            map.put(c, map.get(c) - 1);
            dfs(s, depth + 1, map, sonRes, list);
            sonRes.deleteCharAt(sonRes.length() - 1);
            map.put(c, map.get(c) + 1);
        }
    }
}

关键点

  • 深度优先遍历的思想
  • 保证结果集中每个位置相同的字符只会考虑一次

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

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

相关文章

研究发现GPT-4o等较新的多模态AI模型的安全机制有不足之处

在 ChatGPT 和类似的生成式人工智能模型推出后&#xff0c;很多人都在强调安全问题&#xff0c;政府也参与其中&#xff0c;OpenAI 甚至成立了一个超级协调小组&#xff0c;以阻止未来的人工智能失控&#xff0c;但由于对人工智能安全的发展方向存在分歧&#xff0c;该小组于今…

【排序算法】—— 希尔排序

目录 一、希尔排序原理 二、希尔排序的思路 三、希尔排序为什么快 四、如何取增量 五、源码 希尔排序是简单插入排序的一种升级版&#xff0c;它也是用了插入的思想&#xff0c;而插入排序相比冒泡排序和选择排序的效率要高的多&#xff0c;再将它优化为希尔排序后效率跟原…

有哪些好用的骨传导耳机是值得推荐的?五款非常好用的骨传导耳机推荐!

作为一个数码博主&#xff0c;我以前接触过很多种不同型号的骨传导耳机产品&#xff0c;骨传导耳机在传输声音时不直接经过内耳膜和外耳道&#xff0c;而是通过振动骨骼来传导声音&#xff0c;说明我们的耳朵是开放式的状态&#xff0c;时刻耳道保持清爽&#xff0c;可以避免耳…

前端基础——自学习梳理

超文本协议HTML <!DOCTYPE HTML> <html><head><meta charset"utf-8"> <style> /*Css*/.sty1{height:100px;width:100px;background-color: red;margin-top: 10px;float:left;margin-left: 10px;box-shadow: 10px 10px 10px #0000…

uni微信小程序使用lottie

在uni插件市场找到 lottie-uni https://ext.dcloud.net.cn/plugin?id1044按照文档要求安装 HBuilderX 引入 下载或导入示例获取插件 import lottie from /common/lottie-miniprogram.jsindex.vue <template><uni-popupref"popup"type"center"ba…

C++ | Leetcode C++题解之第172题阶乘后的零

题目&#xff1a; 题解&#xff1a; class Solution { public:int trailingZeroes(int n) {int ans 0;while (n) {n / 5;ans n;}return ans;} };

高考填报志愿策略 做好这几个步骤很重要

怎么填报合适的院校&#xff0c;怎么填报合适的专业&#xff0c;有时候比考试的分数还要重要&#xff0c;所谓“7分考&#xff0c;3分报”&#xff0c;要避免高分第就&#xff0c;那就得理清头绪&#xff0c;一起来了解一下高考填报志愿策略吧。 第1步从了解分数的基础上来了解…

MySQL锁、加锁机制(超详细)—— 锁分类、全局锁、共享锁、排他锁;表锁、元数据锁、意向锁;行锁、间隙锁、临键锁;乐观锁、悲观锁

文章目录 一、概述1.1 MySQL锁的由来1.2 锁定义1.3 锁分类 二、共享锁与排他锁2.1 共享锁&#xff08;S锁&#xff09;2.2 排他锁&#xff08;X锁&#xff09;2.3 MySQL锁的释放 三、全局锁3.1 介绍3.2 语法3.3 特点 四、表级锁4.1 介绍4.2 表锁4.3 元数据锁&#xff08;Meta D…

【资料集】软件全过程性资料整理(立项、标书、实施、研发、运维、结项、验收、合同、评审、测试、安全、方案)

资料获取&#xff1a;本文末个人名片直接获取。 在软件建设的过程中&#xff0c;会涉及多个阶段和相应的文档。以下是一个清晰的软件建设全文档列表&#xff0c;涵盖了从项目启动到交付维护的各个阶段&#xff1a; 1. 立项与可行性分析阶段 《项目建议书》&#xff1a;描述项…

【思科】IPv6 过渡技术 - MPLS(6PE)隧道

【思科】IPv6 过渡技术 - MPLS&#xff08;6PE&#xff09;隧道 实验要求实现思路注意点配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3)&#xff1a;IPv6 网络MP-BGPMPLS R3基础配置MPLS R4基础配置局域网环境(OSPFv3)&#xff1a;IPv6 网络MP-BGPMPLS R5基础配…

可视化大屏加上3D效果,那真是如虎添翼呀。

将可视化大屏与3D效果相结合可以进一步提升其视觉冲击力和信息展示效果&#xff0c;为用户带来更加生动、直观的体验。 以下是一些可以实现的3D效果&#xff1a; 1.3D建筑模型&#xff1a; 通过3D技术展示楼宇的立体建筑模型&#xff0c;可以让用户更加直观地了解楼宇的结构和…

小程序必看——强制安装https证书

微信小程序自2017年起强制要求所有网络请求必须通过HTTPS协议进行&#xff0c;这是为了提升网络安全性和用户数据保护的一项重要举措。 1、安全要求&#xff1a;为了提升网络安全性及保护用户数据&#xff0c;微信小程序要求所有服务端通信必须通过HTTPS协议进行。这意味着&…

比较LlamaIndex和LangChain,选择适合的大模型RAG框架

大家好&#xff0c;大型语言模型&#xff08;LLMs&#xff09;正引领人工智能技术的创新浪潮。自从OpenAI推出ChatGPT&#xff0c;企业、开发者纷纷寻求定制化的AI解决方案&#xff0c;从而催生了对开发和管理这些模型的工具和框架的巨大需求。 LlamaIndex和LangChain作为两大…

【Hadoop集群搭建】实验2:客户机操作系统CentOS的配置

1. 配置hadoop100 在finalshell中连接hadoop100 1.1 在CentOS7中配置静态ip vim /etc/sysconfig/network-scripts/ifcfg-ens33 将bootproto改成static&#xff0c;即ip地址改为静态&#xff0c;并添加刚才配置ip地址、网关和域名解析器。 1.2 将虚拟机名称改成hadoop100 编辑/…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日&#xff0c;景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司&#xff0c;提供从数据采集、清洗、标注的全流程数据解决方案&#xff0c;协助人工智能企业解决整个AI链条中数据采集和数据标…

IDEA 2024.01版本 git分支merge合并

使用idea工具来进行merge合并 1、拉取远端分支信息 2、我的分支是sprint-240627,我要将test分支合并到我这个分支上 找到test分支 3、选择【Merge origin/test into sprint-240627】 从test合并到我们要合并得分支上&#xff0c;结束 4、如果有冲突&#xff0c;就解决冲突即可…

【机器学习】ChatTTS:开源文本转语音(text-to-speech)大模型天花板

目录 一、引言 二、TTS&#xff08;text-to-speech&#xff09;模型原理 2.1 VITS 模型架构 2.2 VITS 模型训练 2.3 VITS 模型推理 三、ChatTTS 模型实战 3.1 ChatTTS 简介 3.2 ChatTTS 亮点 3.3 ChatTTS 数据集 3.4 ChatTTS 部署 3.4.1 创建conda环境 3.4.2 拉取源…

iptables(9)网络防火墙

简介 我们在第一篇介绍iptables的时候提到过,iptables是一个包过滤防火墙,那么防火墙是怎么分类的呢?都有哪些防火墙?下面我们先简单介绍下防火墙的分类: 按部署位置分类 网络层防火墙(网络边界防火墙):位于网络边界处,监控网络流量进出。主机防火墙:安装在单…

discuz迪恩cul!教育课程培训网站模板

Discuz x3.2模板 迪恩cul!教育课程培训 GBK&#xff0c;程序包中内附详细的安装教程&#xff0c;下载后按照教程安装即可 discuz迪恩cul!教育课程培训网站模板

区块链革命:Web3引领数字资产的全新篇章

随着区块链技术的发展和Web3的兴起&#xff0c;数字资产正迎来一场革命性的变革。本文将深入探讨区块链如何引领数字资产进入全新篇章&#xff0c;其背后的技术原理、应用场景以及对未来的深远影响。 ​1. 区块链技术的基础概念 区块链是一种去中心化的分布式账本技术&#xf…