LeetCode 面试题 08.08. 有重复字符串的排列组合

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

示例1:

输入:S = “qqe”
输出:[“eqq”,“qeq”,“qqe”]

示例2:

输入:S = “ab”
输出:[“ab”, “ba”]

提示:

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

  点击此处跳转题目。

二、C# 题解

  同题目 LeetCode 面试题 08.07. 无重复字符串的排列组合,进行剪枝:

  1. 元素 S[i] 与 S[n] 相同时,舍去;
  2. 所得为新结果时,才纳入 ans。

  步骤 1 剪枝不完全,所以还需加上步骤 2。

public class Solution {public string[] Permutation(string S) {List<string> ans = new List<string>();Partition(ans, new StringBuilder(S), 0);return ans.ToArray();}public void Partition(List<string> ans, StringBuilder sb, int n) {if (n == sb.Length) {ans.Add(sb.ToString());return;}HashSet<char> hs = new HashSet<char>();for (int i = n; i < sb.Length; i++) {if (hs.Contains(sb[i])) continue;hs.Add(sb[i]);(sb[i], sb[n]) = (sb[n], sb[i]);Partition(ans, sb, n + 1);(sb[i], sb[n]) = (sb[n], sb[i]);}}
}
  • 时间:140 ms,击败 71.43% 使用 C# 的用户
  • 内存:46.7 MB,击败 92.86% 使用 C# 的用户

  另一种剪枝方式,用一个 Set 集合存放已经交换过的重复元素,即不让当前 S[n] 与已经交换过的字母再进行交换:

public class Solution {public string[] Permutation(string S) {List<string> ans = new List<string>();Partition(ans, new StringBuilder(S), 0);return ans.ToArray();}public void Partition(List<string> ans, StringBuilder sb, int n) {if (n == sb.Length) { // 递归出口ans.Add(sb.ToString());return;}HashSet<char> hs = new HashSet<char>(); // 记录已交换过的元素for (int i = n; i < sb.Length; i++) {if (hs.Contains(sb[i])) continue;   // 该元素已被交换过,则跳过hs.Add(sb[i]);                      // 添加记录(sb[i], sb[n]) = (sb[n], sb[i]);Partition(ans, sb, n + 1);(sb[i], sb[n]) = (sb[n], sb[i]);}}
}
  • 时间:128 ms,击败 100.00% 使用 C# 的用户
  • 内存:46.38 MB,击败 78.57% 使用 C# 的用户

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

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

相关文章

数据结构与算法—时间复杂度和空间复杂度

目录 1. 什么是数据结构&#xff1f; 2.什么是算法&#xff1f; 3、算法的复杂度 4、时间复杂度 (1) 时间复杂度的概念&#xff1a; (2) 大O的渐进表示法&#xff1a; 六个例题&#xff1a; (3) 时间复杂度对比&#xff1a; 两个例题&#xff1a; OJ题分析时间复杂度…

【快速入门】JVM之类加载机制与Native

感慨&#xff1a; 如何定义一个合格的Java程序员&#xff0c;Java程序员要了解掌握哪些知识点&#xff0c;网上的面试题太多了&#xff0c;后端需要了解掌握的知识点太多太多了&#xff0c;Java基础、数据结构、异常、多线程、Spring、Spring boot、事务、算法、数据库&#xf…

iOS CGRect CGPoint NSRange等结构体的NSLog打印输出

iOS的UIKit里提供了UIGeometry.h内有各结构体转换成NSString的方法&#xff0c;可用于打印输出&#xff1b; UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFromCGVector(CGVector vector); UIKIT_EXTERN NSString *NSStringFr…

Transformer [Attention is All You Need]

&#xff08;一&#xff09;论文部分 Abstract (1)The best performing models also connect the encoder and decoder through an attention mechanism. 最好的性能通过注意力机制将编码器和解码器连接在一起。 (2)the Transformer, based solely on attention mechanisms,…

家政预约服务APP小程序搭建,功能支持定制

家政预约服务APP小程序搭建&#xff0c;功能支持定制&#xff0c;后期升级无忧&#xff0e;团队自主研发家政APP系统&#xff0c;正版源码&#xff0c;售后技术保障&#xff01; 家政系统客户端 搭建专属私城流量平台&#xff0c;让您插上互联网的翅膀。找月嫂&#xff0c;育婴…

【Java】Java 代码注释是代码逻辑的灵魂

Java 代码注释是代码逻辑的灵魂 作为程序员来说&#xff0c;写注释是一个非常重要的习惯。尽管编写注释可能需要额外的时间和努力&#xff0c;但它能够给你和其他人在代码中留下重要的信息&#xff0c;使得代码更易于理解和维护。注释可以解释代码的意图、算法的思路、特殊的设…

Vue思考题_01v-for与v-if的优先级谁更高

目录 vue2vue3 官方文档上说不推荐将v-for与v-if在同一个标签上使用&#xff0c;因为两者优先级并不明显。 那么到底是那个指令的优先级比较高呢&#xff1f; 在vue2与vue3中答案是相反的。 vue2 在vue2中将2个指令放在同一个标签上 <template><ul><li v-fo…

竞赛 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

怎么防止重要文件夹丢失?文件夹安全如何保护?

我们在使用电脑的过程中&#xff0c;会将重要数据放在文件夹中&#xff0c;那么&#xff0c;我们该怎么防止重要文件夹丢失呢&#xff1f;下面我们就一起来了解一下。 EFS加密 EFS加密可以对于NTFS卷上的文件夹进行加密&#xff0c;加密后的文件夹将只允许加密时登录系统的用户…

Linux网络编程- struct packet_mreq setsockopt()

struct packet_mreq struct packet_mreq 是一个数据结构&#xff0c;用于 Linux 中的原始数据包套接字&#xff0c;当我们想改变套接字的行为以接收特定类型的数据包时&#xff0c;它与 setsockopt() 函数配合使用。 下面是 struct packet_mreq 的定义&#xff1a; struct p…

zookeeper节点数据类型介绍及集群搭建

一、zookeeper介绍 zookeeper官网&#xff1a;Apache ZooKeeper zookeeper是一个分布式协调框架&#xff0c;保证的是CP&#xff0c;即一致性和分区容错性&#xff1b;zookeeper是一个分布式文件存储系统&#xff0c;文件节点可以存储数据&#xff0c;监听子文件节点等可以实…

docker应用的缓存 docker缓存机制

Docker镜像用作Docker执行程序中的主映像。它们是容器的蓝图&#xff0c;提供了有关如何生成容器的说明。在本文中&#xff0c;我将介绍一些经常被忽视的概念&#xff0c;这些概念将有助于优化Docker镜像开发和构建过程。 让我们从Docker构建过程的简短描述开始。这是通过使用…

艺术字画雕刻经营配送商城小程序的作用是什么

一副传神且精致的绘画/雕塑品不仅具有很好的观赏性&#xff0c;更具备售卖属性&#xff0c;当然由于产品本身本身的局限性&#xff0c;无论开店还是线上朋友圈推广&#xff0c;都难有效果。 通过【雨科】平台搭建字画雕刻经营商城&#xff0c;将所有产品线上售卖&#xff0c;电…

“开启中文智能之旅:探秘超乎想象的 Llama2-Chinese 大模型世界”

“开启中文智能之旅&#xff1a;探秘超乎想象的 Llama2-Chinese 大模型世界” 1.国内Llama2最新下载地址 本仓库中的代码示例主要是基于Hugging Face版本参数进行调用&#xff0c;我们提供了脚本将Meta官网发布的模型参数转换为Hugging Face支持的格式&#xff0c;可以直接通过…

QT CmakeLists配置python

这是exe目录&#xff0c;要放到这里&#xff0c;要放到这里&#xff0c;要放到这里。 find_package(PythonLibs 3.6 REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS})set(PY python/libs/) set(PY_LIBS ${PY}_tkinter ${PY}python3 ${PY}python36 ${PY}python36_d) targ…

排序算法——直接插入排序

一、介绍 插入排序就是将前两个元素排好&#xff0c;再将第三个元素通过与前边的元素比较后插入适当的位置&#xff0c;再将第四个元素插入&#xff0c;不断重复插入与前边元素比较的操作&#xff0c;直到将元素都排列好。 演示如下&#xff1a; 视频演示&#xff1a;…

2731. 移动机器人

2731. 移动机器人有一些机器人分布在一条无限长的数轴上&#xff0c;他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时&#xff0c;它们以每秒钟一单位的速度开始移动。 给你一个字符串 s &#xff0c;每个字符按顺序分别表示每个机器人移动的方…

京东数据分析平台:9月中上旬白酒消费市场数据分析

9月份&#xff0c;围绕白酒的热点不断。9月5日&#xff0c;瑞幸咖啡官微发布消息称&#xff0c;瑞幸与贵州茅台跨界合作推出的酱香拿铁刷新单品纪录&#xff0c;首日销量突破542万杯&#xff0c;销售额破1亿元。9月14日&#xff0c;贵州茅台官微发布消息称与德芙推出联名产品“…

软件培训测试高级工程师多测师肖sir__html之作业11

html之作业 案例1&#xff1a; 截图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单</title></head><body><table style"background-color:red" bo…

【C++】list基本接口+手撕 list(详解迭代器)

父母就像迭代器&#xff0c;封装了他们的脆弱...... 手撕list目录&#xff1a; 一、list的常用接口及其使用 1.1list 构造函数与增删查改 1.2list 特殊接口 1.3list 排序性能分析 二、list 迭代器实现&#xff08;重点难点&#xff09; 关于迭代器的引入知识&#xff1a…