[Algorithm][综合训练][mari和shiny][重排字符串]详细讲解

目录


1.mari和shiny

1.题目链接


2.算法原理详解 && 代码实现

  • 自己的版本:三层循环暴力枚举 --> 超时 --> 40%

    #include <iostream>
    #include <string>
    using namespace std;int main()
    {int n = 0, cnt = 0;cin >> n;string str;cin >> str;// 三层暴力枚举for(int i = 0; i < n - 2; i++){if(str[i] != 's'){continue;}for(int j = i + 1; j < n - 1; j++){if(str[j] != 'h'){continue;}for(int k = j + 1; k < n; k++){if(str[k] != 'y'){continue;}else{cnt++;}}}}cout << cnt << endl;return 0;
    }
    
  • 优化版本:动态规划 – 多状态的线性dp

    • 状态表示

      • s[i][0, i]区间内,有多少个"s"
      • h[i][0, i]区间内,有多少个"sh"
      • y[i][0, i]区间内,有多少个"shy"
    • 状态转移方程
      请添加图片描述

    • 初始化s[0] = str[0] == 's' ? 1 : 0, h[0] = y[0] = 0;

    • 空间优化
      请添加图片描述

    #include <iostream>
    #include <string>
    using namespace std;int main()
    {int n = 0;string str;cin >> n >> str;long long s = 0, h = 0, y = 0;for(int i = 0; i < n; i++){char ch = str[i];if(ch == 's'){s++;}else if(ch == 'h'){h += s;}else if(ch == 'y'){y += h;}}cout << y << endl;return 0;
    }
    

2.重排字符串

1.题目链接


2.算法原理详解 && 代码实现

  • 自己的版本:33.33%
    #include <iostream>
    #include <string>
    #include <unordered_set>
    #include <unordered_map>
    using namespace std;int main()
    {int n = 0;string str;cin >> n >> str;unordered_map<char, int> hash;unordered_set<char> deDup;int maxLen = 0;char maxCh = 'a';for(const auto& ch : str){deDup.insert(ch);hash[ch]++;int tmp = max(maxLen, hash[ch]);if(tmp > maxLen){maxLen = tmp;maxCh = ch;}}bool flag = true;if(maxLen > n / 2 + 1){flag = false;cout << "no" << endl; // 一个字符串的数量如果超过n / 2 + 1,则肯定不可以}// 到这里之后,肯定都是可以的// 这里的重组方法有失偏颇string ret;ret += maxCh, hash[maxCh]--;while(!hash.empty()){for(const auto& ch : deDup){if(hash.count(ch)){ret += ch;hash[ch]--;if(hash[ch] == 0){hash.erase(ch);}}}}if(flag){cout << "yes" << endl<< ret << endl;}return 0;
    }
    
  • 优化版本:贪心 + 构造
    • 不能重排 x > ( n + 1 ) / 2 x > (n + 1) / 2 x>(n+1)/2
    • 能重排
      • 每次去处理一批相同的字符 --> [自己的版本没意识到的思路]
      • 优先处理出现次数最多的字符
      • 每次摆放的时候,间隔一个格子
      • 重点:手动控制间隔 --> [自己的版本没能实现的]
    #include <iostream>
    #include <string>
    #include <unordered_map>
    using namespace std;int main()
    {int n = 0;string str;cin >> n >> str;unordered_map<char, int> hash;int maxLen = 0;char maxCh = 'a';for(const auto& ch : str){if(++hash[ch] > maxLen){maxLen = hash[ch];maxCh = ch;}}if(maxLen > (n + 1) / 2){cout << "no" << endl;}else{int index = 0;string ret;ret.resize(n);// 先去拜访出现次数最多的while(maxLen--){ret[index] = maxCh;index += 2;}hash.erase(maxCh);// 再摆放剩下的for(auto& it : hash){if(it.second){while(it.second--){if(index >= n){index = 1;}ret[index] = it.first;index += 2;}}}cout << "yes" << endl<< ret << endl;}return 0;
    }
    

http://www.ppmy.cn/news/1515438.html

相关文章

Android如何高效的加载大型位图

图片有各种形状和大小。在很多情况下,它们的大小超过了典型应用界面的要求。例如,系统“图库”应用会显示使用 Android 设备的相机拍摄的照片,这些照片的分辨率通常远高于设备的屏幕密度。 鉴于使用的内存有限,理想情况下您只希望在内存中加载较低分辨率的版本。分辨率较低…

【记录】基于Windows系统安装rust环境的过程

到官网下载安装包【入门 - Rust 程序设计语言 (rust-lang.org)】 ![[Pasted image 20240703142911.png]] 选择1&#xff0c;快速安装 选择编译配置&#xff0c;1为标准 安装完成 验证是否安装完毕 rustc --versioncargo --version验证成功&#xff01;

从0到1使用webpack搭建react脚手架

背景 好多前端童鞋工作多年依然不会使用webpack搭建react脚手架&#xff0c;本文就介绍下如何从零开始搭建一个属于你自己的前端脚手架&#xff0c;提高自己的工程化实力&#xff0c;同时也提高团队的开发效率。 一、基础配置 目标&#xff1a;可以启动最简单的react项目 初…

el-table 表格自定义添加表格数据后自动滚动到最底部

动态表格&#xff0c;可以新增行列数&#xff0c;为了用户体验&#xff0c;新增后超出表格流体高度后&#xff0c;自动滚动到最下方 需要element-plus如下api 代码如下&#xff1a; const addCapacity () > {inputList.value.push({name: "",desc: "&quo…

Macos M1 IDEA本地调试 HBase 2.2.2

# 1. 前提 执行 mvn clean package assembly:single -DskipTests没问题&#xff0c;并在hbase-assembly/target目录下生成hbase-2.2.2-bin.tar.gz 文件夹 证明Maven 下载依赖没问题 1.1 报错 1 这里应该是报错找不到 com.google.protobuf:protoc:exe:osx-aarch_64:3.5.1 …

Django 框架中 select_related 和 prefetch_related的区别

在Django框架中&#xff0c;select_related 和 prefetch_related 是两个优化数据库查询性能的非常重要的方法&#xff0c;特别是在处理外键关联查询时。尽管它们的目的相似&#xff0c;但在处理方式和适用场景上有所不同。 select_related select_related 主要是用于解决“一…

Java SpringBoot+Vue实战教程:如何搭建高中素质评价档案系统?

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

基于51单片机的电动式百叶窗proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1ptXdnVxytPadcE7kOT9MwA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

iOS Native与JS通信:JSBridge

文章目录 一、简介二、JS 调用 Native1.使用 URL Schemea.UIWebViewb.WKWebView 2.使用 JavaScriptCore (iOS 7)3.使用 WKWebView 和 WKScriptMessageHandler (iOS 8) 三、Native 调用 JS1.使用 UIWebView2.使用 WKWebView3.使用 JavaScriptCore (iOS 7) 一、简介 对于移动应用…

mysql在k8s环境里安装及搭建主从架构

1、环境准备 k8s集群&#xff0c;版本1.27.0 2、搭建nfs服务器 本次用的k8smaster节点作为nfs服务器&#xff0c;因为需要在两个工作节点上连接nfs&#xff0c;所以工作节点上也要安装nfs yum install -y nfs-utils 我们直接在nfs服务器(k8s-master)当中创建这三个目录并写入…

Linux--数据链路层(macarp)

目录 1.认识以太网 2.以太网帧格式 3.模拟一次局域网通信&#xff08;交换机&#xff09; 4.认识 MAC 地址 对比理解 MAC 地址和 IP 地址 5.认识MTU MTU 对 IP 协议的影响 MTU 对 UDP 协议的影响 MTU 对于 TCP 协议的影响 6.ARP协议 ARP 协议的作用及原理 ARP 数据报的…

前端面试宝典【设计模式】【4】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…

BurpSuite2024.7.3专业版

前言 Burp Suite是一个无需安装软件&#xff0c;下载完成后&#xff0c;直接从命令行启用即可。开箱即可使用支持LInux/Windows/Mac 01更新介绍 2024.7.13版本界面大改动此版本引入了重大的性能升级、对拦截功能的重大增强&#xff0c;以及在审计项目表中新增了扫描插入点列。…

电路笔记(PCB):数字滤波电路的拉普拉斯变换与零极点分析

拉普拉斯变换基础 拉普拉斯变换 拉普拉斯变换是一种积分变换&#xff0c;用于将一个时间域的函数&#xff08;通常是信号或系统的响应&#xff09;转换为一个复频域的函数。这种变换可以简化许多微分方程和线性系统分析的过程。其定义为&#xff1a; L { f ( t ) } F ( s )…

PyCharm汉化:简单一步到胃!PyCharm怎么设置中文简体

最近在弄python的项目 一起加油哦 步骤&#xff1a; PyCharm的汉化可以通过两种主要方法完成&#xff1a; 方法一&#xff1a;通过PyCharm内置的插件市场安装中文语言包 1. 打开PyCharm&#xff0c;点击File -> Settings&#xff08;在Mac上是PyCharm -> Preferences…

[数据集][目标检测]绳子检测数据集VOC+YOLO格式322张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;322 标注数量(xml文件个数)&#xff1a;322 标注数量(txt文件个数)&#xff1a;322 标注类别…

计算机网络基础 - 应用层(1)

计算机网络基础 应用层网络应用的体系结构C/S 体系结构P2P 体系结构C/S 和 P2P 体系结构的混合体 进程通信概述套接字&#xff08;Socket&#xff09;TCP socketUDP socket 应用层协议应用层需要传输层提供的服务Web 与 HTTP概念非持续连接和持续连接HTTP报文格式请求报文响应报…

仿Muduo库实现高并发服务器——任务定时器模块

任务定时器模块TimerWheel在本项目中的简单使用&#xff1a; 下面这张图 是channel模块&#xff0c;poller模块&#xff0c;TimerWheel模块&#xff0c;EventLoop模块&#xff0c;LoopThreadPool模块进行组合。便于大家对这个项目的理解&#xff0c;因为代码看起来挺复杂的。 上…

华为云CodeArts API:API管理一体化平台 7月新特性介绍

CodeArts API是面向开发者&#xff0c;提供API设计、API开发、API文档、API调试、 API自动化测试一体化协作平台&#xff0c;通过维护API各开发阶段数据高度一致&#xff0c;支持开发者高效实现API设计、API开发、API测试一站式体验。2024年7月&#xff0c;CodeArts API主要发布…

基于xr-frame实现微信小程序的图片扫描识别AR功能(含源码)

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案&#xff0c;基于混合方案实现&#xff0c;性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定&#xff0c;发布为正式版&#xff0c;但仍有一些功能还在开发&#…