不相同的字符串(挑战字符串中的算法)

news2024/11/28 10:41:33

 

 

此题不容易考虑全部情况,对于未出现字母不够的情况,需要自己模拟假设一下,才会发现处理方法的玄妙 

// 分析题目不难发现,这道题其实和字符具体长啥样没关系
// 只和字母的个数有关系,所以我们只需统计字母的个数
// 总体思路分两个情况
// 第一个情况,若有不存在的字母
// 例如abab,除ab以外的字母都不存在,可以将两个a转化为单个z,以此类推
// 当所有字母都被占用的时候,那么就进入到第二种情况
// 把所有多出来的字符全都转化成某一个字母,比如a
// 此时的情况一定是a有n个,其他字母全是1个,我们只需要消除多余的a即可
// 每次删掉两个a,再转化成一个a,这样操作一次就少一个a
// 总会变成所有字母都只剩下一个的情况,即达成题意不重复
#include<iostream>
#include<vector>
#include <string>

using namespace std;

int n;
string s;

void solve() {
    while(n--) {
        cin >> s;
        vector<int> a(26, 0); //建立数组储存26个字母的出现次数
        for(int i = 0; i < s.size(); ++i) { //储存数据
            a[s[i] - 97]++;
        } 
        int cnt = 0;
        for(int i = 0; i < 26; ++i) {
            if(a[i] > 1) { // 找出用第一种情况要操作的次数
                int temp = a[i] / 2;
                cnt += temp;
                a[i] = a[i] - temp * 2; // 减去被删除的字母
            }
        } 
        int cnt0 = 0; // 统计此时未出现的字母个数
        for(int i = 0; i < 26; ++i) {
            if(a[i] == 0) {
                cnt0++;
            }
        }
        int ans;
        if(cnt > cnt0) { // 如果此时未出现字母的个数不够
            ans = cnt + (cnt - cnt0);
            // 第一个cnt代表第一种情况的操作次数
            // cnt - cnt0代表将所有未被消化的字母累加到a头上
            // 因每次操作会消除掉一个多余的a
            // 所以最终答案是 第一种情况的操作次数 + (第二种情况的操作次数)
        }
        else {
            ans = cnt;// 第一种情况可以容纳,那么操作次数就是答案
        }
        cout << ans << endl;
    }
}

int main() {
    while(cin >> n) {
        solve();
    }
    return 0;
}

 

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

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

相关文章

【C语言】联合union

类似于struct结构的写法&#xff0c;但是不同的是struct内部的变量都是独立的&#xff0c;但是union的所有成员共享一个空间同一时间只有一个成员是有成效的union的大小是其最大的成员 sizeof(union ...) sizeof(每个成员的最大值)初始化时对第一个成员初始化 union Anelt {i…

SpringMvc参数获取

目录 一、封装为简单数据类型 二、封装为单个对象 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;控制层 三、封装为关联对象 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;控制层 &#xff08;3&#xff09;使用表单发送带有参数的请求 四…

8位单片机的优势:永不过时的选择

被广泛应用于各种智能化设备中&#xff0c;8位单片机以其独特的优势&#xff0c;成为了许多应用场景的首选。为什么它们在今天仍然具有重要的应用价值&#xff1f; 一、8位单片机的优势&#xff1a; &#xff08;1&#xff09;成本效益 8位单片机由于其制造成本相对较低&…

如何排版一篇优秀的公众号文章呢?

在这个信息爆炸的时代&#xff0c;微信公众号已经成为人们获取信息的重要渠道之一。然而&#xff0c;如何排版一篇优秀的公众号文章却一直困扰着许多新手和老手。 无论是在校社团新媒体小白&#xff0c;还是新媒体工作者&#xff0c;相信大家对排版界面都不会陌生&#xff0c;…

英国8月CPI意外降温,然而加息决定仍悬而未决

KlipC报道&#xff1a;据英国国家统计局公布最新数据显示&#xff0c;8月CPI同比上涨6.7%&#xff0c;低于上月数据&#xff0c;核心CPI增幅低于经济学家的预测。数据公布后&#xff0c;英镑走弱、英债收益率下跌&#xff0c;英镑应声下跌0.5%至5月以来的最弱水平&#xff0c;两…

Rust : 与C多种交互尝试

rust调用C端的库函数&#xff0c;有很多方法&#xff0c;场景也有所不同。包括windows还是linux&#xff0c;内置库还是自定义库&#xff0c;还是三方库等等。 一、rust调用其内置的C库 这个很简单&#xff0c;直接把extern "C"引入即可&#xff1a; 比如&#xff0…

dvwa靶场通关(十二)

第十二关&#xff1a;Stored Cross Site Scripting (XSS)&#xff08;存储型xss&#xff09; low 这一关没有任何防护&#xff0c;直接输入弹窗代码 弹窗成功 medium 先试试上面的代码看看&#xff0c;有没有什么防护 发现我们的script标签不见了&#xff0c;应该是被过滤掉…

CentOS7下制作OpenSSH 9.4p1 RPM包,并验证升级

1、准备条件 1&#xff09;openssh-8.4p1.tar.gz源码包 https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz --no-check-certificate 2&#xff09;x11-ssh-askp…

Django实现音乐网站 ⒅

使用Python Django框架做一个音乐网站&#xff0c; 本篇主要为歌单列表、歌单详情及推荐页-歌单内容改动。 目录 歌单列表 设置路由 视图处理 模板渲染 歌单-单曲列表 设置路由 视图处理 模板渲染 推荐页-歌单列表 模板渲染修改 总结 歌单列表 可通过导航>歌单或…

如何批量将长视频分割成短视频?详细操作步骤一目了然

如果你需要将一个长视频分割成多个短视频&#xff0c;你可以使用固乔智剪软件来实现这一目标。以下是详细步骤&#xff1a; 1. 在浏览器中搜索并下载"固乔智剪软件"。这个软件是专门用于视频剪辑和处理的&#xff0c;它提供了许多实用的功能。 2. 进入软件主页&#…

外贸独立站哪家好?推荐的独立站建站平台?

如何选外贸独立站搭建系统&#xff1f;创建贸易网站的工具有哪些&#xff1f; 在如今全球贸易不断蓬勃发展的背景下&#xff0c;外贸独立站成为许多企业拓展国际市场的首选之一。然而&#xff0c;要想在竞争激烈的市场中脱颖而出&#xff0c;选择一家合适的外贸独立站服务提供…

error:03000086:digital envelope routines::initialization error问题解决

目录 问题描述&#xff1a;error:03000086:digital envelope routines::initialization error 问题原因&#xff1a;nodejs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制&#xff0c;nodeJs v17 之前版本没影响&#xff0c;但 V17 和之后版本会出现这个错…

Learn Prompt-基础用法

基本法则​ 相比于搜索引擎&#xff0c;ChatGPT的优势在于其高效的想法关联和信息归纳能力。在进一步讲解提示的构建思路前&#xff0c;我希望你可以了解到两点通用的经验法则&#xff0c;用来提高生成AI模型的输出质量。其中包括 尝试提示的多种表述以获得最佳结果使用清晰简…

良好的测试环境应该怎么搭建?对软件产品起到什么作用?

为了确保软件产品的高质量&#xff0c;搭建一个良好的测试环境是至关重要的。在本文中&#xff0c;我们将从多个角度出发&#xff0c;详细描述良好的测试环境的搭建方法、注意事项以及对软件产品的作用。    一、软件测试环境的搭建   1、从硬件设备的选择与配置开始。对于…

大数据导论 四、JDK安装部署

1、下载JDK 官网 https://www.oracle.com/java/technologies/downloads/archive/ 下载 jdk-8u333-linux-x64.tar.gz 上传 2、解压 解压 3、配置环境变量 编辑文件 追加内容 保存并退出 刷新环境变量 4、验证

10分钟带你初步了解 Service Worker

是什么&#xff1f; 服务器与浏览器的中介持久的浏览器离线缓存 有什么用&#xff1f; 解放主线程&#xff0c;节省资源加载&#xff0c;提高浏览体验 其他描述 基于web worker&#xff0c;并在其基础上&#xff0c;增加了离线缓存的功能独立于当前网页线程&#xff08;后台…

3-D HANet:一种用于目标检测的柔性三维 HeatMap 辅助网络

论文背景 室外场景感知使用 Lidar&#xff1a; 1.点云数据不受天气(雾、风暴、雨和雪)的影响&#xff0c;支持稳定的环境感知&#xff1b; 2.点云数据在很大程度上保留了原来中物体的空间结构特征。 3D 目标检测是室外场景感知的重要组成部分。 从一个不完整的点云空间结构中…

如何快速在 Apache DolphinScheduler 新扩展一个任务插件?

作者 | 代立冬 编辑 | Debra Chen Apache DolphinScheduler 是现代数据工作流编排平台&#xff0c;具有非常强大的可视化能力&#xff0c;DolphinScheduler 致力于使数据工程师、分析师、数据科学家等数据工作者都可以简单轻松地搭建各种数据工作流&#xff0c;让数据处理流程…

使用Python绘制多个股票的K线图

K线图是金融领域常用的技术分析工具&#xff0c;可以洞察地展示股票的开盘价、收盘价、最高价和最低价等信息。在投资决策中&#xff0c;对多个股票的走势进行对比分析是非常重要的。随着金融市场的发展&#xff0c;投资者对于多种股票的对比分析需求越来越高。传统的方式是通过…

tokio::net学习

tokio::net 该模块包含TCP/UDP/Unix网络类型,类似于标准库,可用于实现网络协议。 networking protocols Organization TcpListener and TcpStream provide functionality for communication over TCP UdpSocket provides functionality for communication over UDP UnixLi…