每日一道算法题 面试题 08.08. 有重复字符串的排列组合

题目

面试题 08.08. 有重复字符串的排列组合 - 力扣(LeetCode)

Python

class Solution:def permutation(self, S: str) -> List[str]:# 以索引记录字符是否用过le=len(S)idx=[_ for _ in range(le) ]# 组合得到的字符串combine=['']*leans=[]# 递归def fun(pos,choice):"""pos:索引,层数choice:可以选择的索引,choice使用集合,因为可以用减法"""if pos==le and (''.join(combine) not in ans):# 当pos=le-1时,combine[pos]还没写字符,故结束条件不为pos==le-1ans.append(''.join(combine))return # 归# 递for _ in list(choice):combine[pos]=S[_] # 当前层,即pos层fun(pos+1,choice-{_})  #下一层,即pos+1层fun(0,set(idx))return ans

C++

交换字符串元素求不同全排列

若字符串长度为n,将第一个字母分别与后面每一个字母进行交换,生成n种不同的全排列;再用第二个元素与后面每一个元素进行交换,生成n - 1种不同的全排列。

对于此题需要用一个Set集合来存放已经交换过的重复元素。

class Solution {
public:void dfs(vector<string>& ans,string& s,int idx){if(idx==s.size()){ans.push_back(s);return ;}set<char> record;for (int i=idx;i<s.size();i++){if(record.find(s[i])==record.end())  //集合里没有此字符{record.insert(s[i]);  //记录字符swap(s[idx],s[i]);  //交换dfs(ans,s,idx+1);swap(s[i],s[idx]);  //又换回来,复原}}}vector<string> permutation(string S) {vector<string> ans;dfs(ans,S,0);return ans;}
};

C语言

/*** Note: The returned array must be malloced, assume caller calls free().*/#include <string.h>void swap(char *a,char *b){char t;t=*a;*a =*b;*b=t;}int dfs(char *tmp,int len,int idx,char **ans,int *returnSize)
{char used_char[27]; //使用过的字母,26个字母+'\0'=27int j;int usedi=0;if(idx>=len-1){strcpy(ans[(*returnSize)++],tmp);return 0;}for(int i=idx;i<len;i++){if(usedi==0) used_char[usedi++]=tmp[i];else{for(j=0;j<usedi;j++) if(used_char[j]==tmp[i]) break;if(j>=usedi) used_char[usedi++]=tmp[i];else continue;}swap(&tmp[i],&tmp[idx]);dfs(tmp,len,idx+1,ans,returnSize);swap(&tmp[i],&tmp[idx]);}return 0;
}char** permutation(char* S, int* returnSize)
{char **ans,*tmp;int len=strlen(S);int i;int idx;//p_num为排列组合的总数tmp=(char *)malloc(sizeof(char)*(len+2));strcpy(tmp,S);ans=(char **)malloc(sizeof(char *)*1000);for( i=0;i<1000;i++){ans[i]=(char*)malloc(sizeof(char)*(len+1));}idx=0;*returnSize=0;dfs(tmp,len,idx,ans,returnSize);return ans;
}

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

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

相关文章

Go 中使用map时注意的问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

面对资质申请被拒,河南企业如何调整策略再次冲刺?

当乙级风力发电资质申请未通过时&#xff0c;不必过于焦虑&#xff0c;以下是一份详细的二次申请攻略&#xff0c;帮助你更有条理地准备和提交申请&#xff1a; 一、失败原因分析与总结 查询评审意见&#xff1a;在收到评审结果后&#xff0c;首先查询并仔细阅读专家评审意见&…

利用python爬取上证指数股吧评论并保存到mongodb数据库

大家好&#xff0c;我是带我去滑雪&#xff01; 东方财富网是中国领先的金融服务网站之一&#xff0c;以提供全面的金融市场数据、资讯和交易工具而闻名。其受欢迎的“股吧”论坛特别适合爬取股票评论&#xff0c;东方财富网的股吧聚集了大量投资者和金融分析师&#xff0c;他们…

vue开发网站--关于window.print()调取打印

1.vue点击按钮调取打印 点击按钮&#xff1a; 调取打印该页面&#xff1a; <div click"clickDown()">下载</div>methods: {//下载-调取打印clickDown() {window.print()}, }<style>/* 点击打印的样式 */media print {.clickDown {display: no…

推荐一款免费的GIF编辑器——【ScreenToGif编辑器】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️木道寻的主页 文章目录 &#x1f525;前言&#x1f680;素材准备&#x1f680;逐帧制作&#x1f680;保存图片⭐️⭐️⭐️总结 &#…

【吊打面试官系列-MyBatis面试题】MyBatis 框架适用场合?

大家好&#xff0c;我是锋哥。今天分享关于 【MyBatis 框架适用场合 &#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MyBatis 框架适用场合&#xff1f; 1、MyBatis 专注于 SQL 本身&#xff0c;是一个足够灵活的 DAO 层解决方案。 2、对性能的要求很高&#…

Java | Leetcode Java题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; public class Solution {public int hammingWeight(int n) {int ret 0;while (n ! 0) {n & n - 1;ret;}return ret;} }

MySQL之如何分析慢查询

1、一个SQL语句执行很慢&#xff0c;如何分析&#xff1f; 可使用“explain”或者“desc”命令获取MySQL如何执行select语句的信息。 语法&#xff1a;直接在select语句前加关键字 explain或desc explain select job_desc from xxl_job_info where id 1; 2、执行计划中五个重…

【涵子来信】——社交宝典:克服你心中的内向,世界总有缺陷

内向&#xff0c;你是内向的吗&#xff1f;想必每个人不同&#xff0c;面对的情形也是不同的。 暑假是一个很好的机会&#xff0c;我是可以去多社交社交。但是&#xff0c;面对着CSDN上这么多技术人er&#xff0c;那么&#xff0c;我的宝典&#xff0c;对于大家&#xff0c;有…

电脑文件夹里的表格删除了怎样恢复?别急,可这样做

在日常工作中&#xff0c;我们经常会使用到各种电子表格来记录、整理和分析数据。然而&#xff0c;有时由于操作失误或其他原因&#xff0c;我们可能会不小心将电脑文件夹中的重要表格删除。面对这种情况&#xff0c;许多人可能会感到惊慌失措&#xff0c;担心数据丢失会给工作…

db2主键自增、IDENTITY自增

db2设置主键自增 一、方式一&#xff1a;IDENTITY设置主键自增1.1、语法一&#xff1a;GENERATED BY DEFAULT AS IDENTITY1.1.1、使用1.1.2、注意事项或坑 1.2、语法二&#xff1a;GENERATED ALWAYS AS IDENTITY 二、方式二&#xff1a;Sequence(了解)2.1、insert时使用Sequenc…

微信商家转账到零钱

1.发起商家转账 发起商家转账接口。商户可以通过该接口同时向多个用户微信零钱进行转账操作。请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。注意受理成功将返回批次单号&#xff0c;此时并不代表转账成功&#x…

筑算网基石 创数智未来|锐捷网络闪耀2024 MWC上海

2024年6月26日至28日&#xff0c;全球科技界瞩目的GSMA世界移动大会&#xff08;MWC 上海&#xff09;在上海新国际博览中心&#xff08;SNIEC&#xff09;盛大召开。作为行业领先的网络解决方案提供商&#xff0c;锐捷网络以“筑算网基石 创数智未来”为主题&#xff0c;带来了…

Java程序员学习Go开发Higress的WASM插件

Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战&#xff0c;研究一下。之前没搞过go&#xff0c;踩了很多坑&#xff0c;最主要的就是tinygo打包&#xff0c;多方寻求解决无果&#xff0c;结论是tinygo0.32go1.19无法在macos arm架构下打包。…

SerDes介绍以及原语使用介绍(3)ISERDESE2原语介绍

文章目录 前言一、ISERDESE21.1、ISERDESE2端口信号1.1、ISERDESE2参数 二、BITSLIP-位滑动2.1、BITSLIP作用2.2、BITSLIP使用2.3、BITSLIP示例 前言 上文对OSERDESE进行了详细介绍并且进行了仿真分析&#xff0c;本文开始对ISERDES进行介绍&#xff0c; 一、ISERDESE2 不难…

云计算【第一阶段(20)】磁盘管理与文件系统 服务器硬件及RAID配置实战(三)

一、服务器硬件详解 cpu 主板 内存 硬盘 网卡 电源 raid卡 风扇 远程管理卡 1.1、硬盘尺寸 目前生产环境中主流的两种类型硬盘 3.5寸 和2.5寸硬盘 2.5寸硬盘可以通过使用硬盘托架后适用于3.5寸硬盘的服务器 但是3.5寸没法转换成2.5寸 二、RAID阵列详解 独立硬盘冗余阵…

【深度学习】图形模型基础(2):概率机器学习模型与人工智能

1.引言 1.1.背景 当机器需要从经验中汲取知识时&#xff0c;概率建模成为了一个至关重要的工具。它不仅为理解学习机制提供了理论框架&#xff0c;而且在实际应用中&#xff0c;特别是在设计能够从数据中学习的机器时&#xff0c;概率建模展现出了其独特的价值。概率框架的核…

不知道自己的优势擅长和兴趣爱好,我该如何填报高考志愿选专业?

天生我才必有用&#xff0c;每个人都是独立的个体&#xff0c;拥有自己的优势和擅长&#xff0c;当然这个优势和擅长&#xff0c;不是和别人对比&#xff0c;而是和自己对比产生的。 如果说你不知道自己的优势擅长&#xff0c;不知道自己的兴趣和爱好&#xff0c;那只不过是你没…

cuda编码入门学习笔记

在日常深度学习和科学计算中,使用图形处理器(GPU)进行加速是一个常见的做法。CUDA (Compute Unified Device Architecture) 是英伟达公司提供的用于GPU编程的平台和编程模型。同时它是一种并行计算模型,允许开发人员使用标准C语言对GPU进行编程。CUDA的核心思想是将任务分解为…

The difference between Manhattan distance and Cosine Distance

题意&#xff1a;为什么即使返回了相同的文本块&#xff0c;曼哈顿距离&#xff08;Manhattan Distance&#xff09;和余弦距离&#xff08;Cosine Distance&#xff09;之间还是存在差异&#xff1f; 问题背景&#xff1a; I am using the qdrant DB and client for embeddin…