【PTA题目解答】7-3 字符串的全排列(20分)next_permutation

1.题目

给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。

输入格式:

一行,一个字符串,长度不大于8。

输出格式:

输出所有全排列,每行一种排列形式,字典序从小到大。

输入样例:

在这里给出一组输入。例如:

abc

输出样例:

在这里给出相应的输出。例如:

abc
acb
bac
bca
cab
cba

2.算法原理

排序字符串: 使用 sort(s.begin(), s.end()) 将字符串按字典序排序。 这是必要的,因为next_permutation 需要从最小的排列开始生成。

生成全排列: 使用 do-while 循环和 next_permutation 生成所有排列。next_permutation(s.begin(), s.end()) 会修改字符串 s,生成下一个字典序排列。 当没有下一个排列时,函数返回 false,循环结束。

代码:

#include <iostream>
#include <algorithm> // 包含 next_permutation 和 sort
#include <string>int main() {std::string s;std::cin >> s; // 输入字符串// 将字符串按字典序排序std::sort(s.begin(), s.end());// 输出所有排列do {std::cout << s << std::endl;} while (next_permutation(s.begin(), s.end()));return 0;
}

扩展:模拟 nextPermutation 函数

#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // 用于 std::reverseusing namespace std;bool nextPermutation(string& s) {int n = s.length();int i = n - 2;// 从后向前查找第一个 s[i] < s[i+1] 的位置while (i >= 0 && s[i] >= s[i + 1]) {i--;}// 如果找不到,说明已经是最大排列if (i < 0) {return false;}// 从后向前查找第一个 s[j] > s[i] 的位置int j = n - 1;while (j >= 0 && s[j] <= s[i]) {j--;}// 交换 s[i] 和 s[j]std::swap(s[i], s[j]);// 反转 i+1 到末尾的部分std::reverse(s.begin() + i + 1, s.end());return true;
}int main() {string s;cin >> s; // 输入字符串// 将字符串按字典序排序sort(s.begin(), s.end());// 输出所有排列do {std::cout << s << std::endl;} while (nextPermutation(s));return 0;
}

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

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

相关文章

专题三0~n-1中缺失的数字

1.题目 给一个数组&#xff0c;单调性是递增的&#xff0c;需要找到缺失的数字&#xff0c;加上这个数字就变为等差数组了。 2.算法原理 这里用二分来解决&#xff0c;而二段性是根据下标区分&#xff0c;临界值前的数字于下标相对应&#xff0c;临界值后的于下标相差1&#x…

【图像处理】ISP(Image Signal Processor) 图像处理器的用途和工作原理?

ISP&#xff08;图像信号处理器&#xff09;是数字影像设备的“视觉大脑”&#xff0c;负责将传感器捕获的原始电信号转化为我们看到的高清图像。以下从用途和工作原理两方面通俗解析&#xff1a; 一、ISP的核心用途&#xff1a;让照片“更像眼睛看到的” 提升画质&#xff1a…

python学习笔记-mysql数据库操作

现有一个需求&#xff0c;调用高德api获取全国县级以上行政区数据并保存为json文件&#xff0c;使用python获取&#xff1a; import requests import json# 高德API Key api_key "your_api_key"# 调用行政区域查询API def fetch_districts():url f"https://r…

Redisson 实现分布式锁源码浅析

大家好&#xff0c;我是此林。 今天来分享Redisson分布式锁源码。还是一样&#xff0c;我们用 问题驱动 的方式展开讲述。 1. redis 中如何使用 lua 脚本&#xff1f; Redis内置了lua解释器&#xff0c;lua脚本有两个好处&#xff1a; 1. 减少多次Redis命令的网络传输开销。…

【软件】免费的PDF全文翻译软件,能保留公式图表的样式

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 很多PDF全文翻译软件都是收费的&#xff0c;而划线翻译看着又很累。这个开源的PDF全文翻译软件非常好用&#xff0c;并且能够保留公式、图表、目录和注…

CentOS 7 系统上安装 SQLite

1. 检查系统更新 在安装新软件之前&#xff0c;建议先更新系统的软件包列表&#xff0c;以确保使用的是最新的软件源和补丁。打开终端&#xff0c;执行以下命令&#xff1a; sudo yum update -y -y 选项表示在更新过程中自动回答 “yes”&#xff0c;避免手动确认。 2. 安装 …

Gin(后端)和 Vue3(前端)中实现 Server-Sent Events(SSE)推送

在 Gin&#xff08;后端&#xff09;和 Vue3&#xff08;前端&#xff09;中实现 Server-Sent Events&#xff08;SSE&#xff09;推送&#xff0c;主要分为以下几个步骤&#xff1a; 后端&#xff08;Gin&#xff09;实现 SSE Gin 框架可以使用 c.SSEvent 方法来推送 SSE 事…

大模型微调中显存占用和训练时间的影响因素

BatchSize 显存占用&#xff1a;与batch_size呈线性关系&#xff0c;可理解为 M t o t a l M f i x e d B a t c h S i z e ∗ M p e r − s a m p l e M_{total}M_{fixed}BatchSize*M_{per-sample} Mtotal​Mfixed​BatchSize∗Mper−sample​&#xff0c;其中 M f i x e d…

【排序算法对比】快速排序、归并排序、堆排序

排序算法对比&#xff1a;快速排序、归并排序、堆排序 1. 快速排序&#xff08;Quick Sort&#xff09; 原理 快速排序采用 分治法&#xff08;Divide and Conquer&#xff09;&#xff0c;通过选取基准值&#xff08;pivot&#xff09;&#xff0c;将数组划分为 小于基准值…

PentestGPT 下载

PentestGPT 下载 PentestGPT 介绍 PentestGPT&#xff08;Penetration Testing GPT&#xff09;是一个基于大语言模型&#xff08;LLM&#xff09;的智能渗透测试助手。它结合了 ChatGPT&#xff08;或其他 GPT 模型&#xff09;与渗透测试工具&#xff0c;帮助安全研究人员自…

防火墙虚拟系统实验

一实验拓扑 二实验过程 配置资源 创建虚拟系统 配置管理员 创建安全策略

代码随想录算法训练营第31天 | 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 代码随想录 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…

Go语言对于MySQL的基本操作

一.下载依赖 终端中输入&#xff1a; go get -u github.com/go-sql-driver/mysql 导入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 获取驱动 import ("databa…

Linux与深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介绍 在上一节已经完成了客户端和服务端基本的HTTP通信&#xff0c;但是前面的传递并没有完全体现出HTTP的序列化和反序列化&#xff0c;为了更好得理解其工作流程&#xff0c;在本节会以更加具体的方式分析到HTTP序列化和反序列化 本节会在介绍…

基于Python+SQLite实现(Web)验室设备管理系统

实验室设备管理系统 应用背景 为方便实验室进行设备管理&#xff0c;某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录&#xff0c;查看现有的所有设备&#xff0c; 增加设备等功能。 开发环境 Mac OSPyCharm IDEPython3Flask&#xff…

深拷贝and浅拷贝!

一、什么是拷贝&#xff1f;什么是深拷贝和浅拷贝&#xff1f; &#xff08;1&#xff09;拷贝&#xff1a;拷贝就是为了复用原对象的部分or全部数据&#xff0c;在原对象的基础上通过复制的方式创建一个新的对象。 拷贝对象可以分为三种类型&#xff1a;直接赋值、浅拷贝和深拷…

高频面试题(含笔试高频算法整理)基本总结回顾43

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(34)混元金斗装万物 - 0-1背包问题(二维DP)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(34)混元金斗装万物 - 0-1背包问题(二维DP) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的混元谷,谷中有一座巨大的混元金斗,斗身闪烁着神秘的光芒。谷口有一块巨大的石碑,上面刻着一行文字:“欲…

网络爬虫【简介】

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲视图 一、网络爬虫的定义 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称为网络蜘蛛、网络机器人等&#xff0c;是一种按照一定规则自动抓取互联网信息的程序或脚本。它…

​AI时代到来,对电商来说是效率跃升,还是温水煮青蛙

​凌晨三点的义乌商贸城&#xff0c;95后创业者小王&#xff0c;静静地盯着屏幕上的AI工具&#xff0c;竟露出了笑容。这个月他的跨境玩具店销量提升了不少&#xff0c;从之前的状态翻了3倍&#xff1b;而且团队人数有所变化&#xff0c;从5人缩减到了2人&#xff08;其中包括他…