当前位置: 首页 > news >正文

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

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


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

一、题目描述

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

二、测试用例

示例 1:

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

示例 2:

 输入:S = "ab"输出:["ab", "ba"]

提示:

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

三、解题思路

  1. 基本思路:
      使用回溯法,在利用散列表去重
  2. 具体思路:
    • 编写 dfs 函数
      • 如果字符串每个位置的元素都确定,则记录字符串到答案中。
      • 创建散列表
      • 确定第 k 个位置的字符,从第 k+1 到尾部选取一个字符进行交换
        • 如果散列表中存在该字符,表示重复,则跳过
        • 散列表记录该字符
        • 与第 k 个位置的字符交换
        • 递归确定第 k+1 个字符
        • 恢复状态
    • 调用 dfs 函数,返回结果。

四、参考代码

时间复杂度: O ( n ! ) \Omicron(n!) O(n!)【n 是字符串长度】
空间复杂度: O ( n ) \Omicron(n) O(n)

class Solution {
public:string str;vector<string> ans;void dfs(const int& k) {if (k == str.length()) {ans.emplace_back(str);return;}vector<bool> m(128, false);for (int i = k; i < str.length(); i++) {if (m[str[i]])continue;m[str[i]] = true;swap(str[k], str[i]);dfs(k+1);swap(str[k], str[i]);}}vector<string> permutation(string S) {str = S;dfs(0);return ans;}
};

相关文章:

  • 低功耗架构突破:STM32H750 与 SD NAND (存储芯片)如何延长手环续航至 14 天
  • OCC笔记:BRepMesh_IncrementalMesh的使用
  • 用Git管理你的服务器配置文件与自动化脚本:版本控制、变更追溯、团队协作与安全回滚的运维之道
  • day 26 函数专题
  • 尚硅谷redis7 90-92 redis集群分片之集群扩容
  • day41 python图像识别任务
  • Unity 中实现首尾无限循环的 ListView
  • 机房网络设备操作安全管理制度
  • OpenCV中的重要、常用知识点汇总(图像处理、特征检测与匹配、图像分割与轮廓分析、视频处理与分析和机器学习与深度学习等)
  • 云服务器系统日志占满磁盘怎么办?
  • 下一代液晶显示底层技术与九天画芯的技术突围
  • 5. 算法与分析 (2)
  • 企业应用AI对向量数据库选型思考
  • 【python深度学习】Day 40 训练和测试的规范写法
  • 深入解析Go语言数据类型:从底层到高级应用
  • 历年浙江大学计算机保研上机真题
  • 0-EATSA-GNN:基于图节点分类师生机制的边缘感知和两阶段注意力增强图神经网络(code)
  • 【Android】如何抓取 Android 设备的 UDP/TCP 数据包?
  • SOC-ESP32S3部分:20-SPISPI屏幕驱动
  • 【Docker管理工具】部署Docker管理面板DweebUI
  • 中山seo网站优化公司/电池优化大师下载
  • 上海 网站备案系统/缅甸在线今日新闻
  • 西安网站建设怎么接单/沈阳seo团队
  • 网站设计第一步怎么做/营销推广渠道有哪些
  • 高佣联盟做成网站怎么做/关键词排名查询工具有哪些
  • 网站seo公司/seo培训优化课程