题目:

题意:

对于输入的字符串,可以选择其中的多个(一个或多个)位置,以便没有两个选定的位置彼此相邻。然后,从字符串中删除所选位置上的字母。在这个操作条件下,找出让字符串只剩下相同字符的最小操作数。

题解:

  1. 这个题目是一个贪心题,目的是找到两个相同字符之间的最长距离,然后求出让这两个相同字符中间没有其他字符的最小操作次数,然后在所有的操作数中取最小值。
  2. 这个题目的关键就是明白最小操作次数怎么求,我一开始一直以为是log2(距离),因为我使用距离求解不断的 /2 ,从时间复杂度上面,我得出是log2(距离),但是最小操作次数实际上是log2(距离)+1,通过带入数字计算,log2(1)= 0,但是还是要操作一次,所以推出log2(距离)+1
  3. 明白最小操作次数怎么求之后,就要解决找到两个相同字符之间的最长距离,我使用的是vector,遇见相同的字符就加入,因为可能有一些字符在字符串中没有出现,我给了一个长度就是字符串的长度。

代码:

#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int t;
int main() {cin>>t;getchar();while(t--) {string a;cin>>a;int n=a.size();vector<int> num[26];for(int i=0; i<n; i++) {num[a[i]-'a'].push_back(i);}int minn=n;for(int i=0; i<26; i++) {int left=-1;//如果字符没有出现就给它一个值为字符串的长度 num[i].push_back(n);int sum=0;//找到两个相同字符之间的最大差,要操作的次数是 log(最大差)/log(2)+1for(int j=0;j<num[i].size();j++){int len = num[i][j]-left-1;if(len>=1){int k=log2(len)+1;sum=max(sum,k);} left=num[i][j];}//找到最小值 minn=min(minn,sum);}cout<<minn<<endl;}return 0;
}

Tear It Apart相关推荐

  1. 问题五十一:怎么用ray tracing画tear drop

    tear drop是长这个样子的: 51.1 数学推导 在网上找到tear drop的参数方程: 51.2 看C++代码实现 ------------------------------------- ...

  2. MCU 8080规格LCD屏斜线问题——Tear功能

    一.问题描述 I80规格的LCD屏,一般都是竖屏,比如240x320: 在实际使用中,经常需要竖屏横用,即240x320的竖屏要显示320*240的图片或视频:如果只是单纯显示图片,是看不出斜线问题的 ...

  3. LCD显示异常分析——撕裂(tear effect)

    概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear effect)问题进行详细分析,以及给出这类问题的常用解决方法 ...

  4. tear off技术

    现在讨论以下tear   off技术 tear   off只要用于当接口很多,容易造成接口 "膨胀 "的情况. 比如: class   CBeachBall   :     pub ...

  5. C. Tear It Apart(贪心)

    Problem - C - Codeforces 给定一个字符串,操作多次后只剩下同一字符,每次操作消除不相邻的多个字符,求最小操作次数 答案最多为字符串的长度,选定要保留的字符,看看对于每两个这个字 ...

  6. CF - Tear It Apart

    题意:我们可以进行一个操作,一次删除一个或多个字符,但删除的字符不可以相邻 求对所给字符我们要进行最少几次从而形成相同字符组成的串串(且最长) 解: 当我们想要使得两个字符靠近,先要看她两之间隔着几个 ...

  7. 深入理解 wpa_supplicant(四)

    本文为<深入理解Android Wi-Fi.NFC和GPS卷>读书笔记,Android源码为Android 5.1 android-5.1/external/wpa_supplicant_ ...

  8. 机器学习—决策树构造算法的python实现

    机器学习-决策树算法的python实现 想要实现的效果 先来看下结果 程序原理 数据 完整代码(附有具体解析) 想要实现的效果 对于这个不好玩的决策树,我想要得到的就是通过决策树训练我的数据然后生成这 ...

  9. JUnit基础及第一个单元测试实例(JUnit3.8)

    JUnit基础及第一个单元测试实例(JUnit3.8) 单元测试 单元测试(unit testing) ,是指对软件中的最小可测试单元进行检查和验证. 单元测试不是为了证明您是对的,而是为了证明您没有 ...

最新文章

  1. 图解梯度下降背后的数学原理
  2. 使用原生JS实现简单的ajax
  3. wxWidgets:wxAnimationCtrl类用法
  4. P4027-[NOI2007]货币兑换【斜率优化dp,CDQ分治】
  5. 地图定点图表联动_拿下这套地图组件,快人一步做出炫酷报表!
  6. POS机刷卡机招商加盟企业网站源码
  7. java常量池的理解_Java常量池的大概理解
  8. R语言不止可以做数据分析,还可以变着方法玩出花
  9. 遥感图像——多波段数据存储的方式
  10. DDD中的Specification模式
  11. 兄弟连新版PHP视频教程(共346讲)
  12. Catalan Number(卡特兰数/卡塔兰数)
  13. 设置电脑定时开机、定时关机
  14. 一篇不错的wsl文章
  15. InnoSetup打包自动签名
  16. android 自动翻页插件,网页自动翻页Chrome插件下载
  17. Chrome 跨域 请求不携带cookie
  18. 随机森林实战(分类任务+特征重要性+回归任务)(含Python代码详解)
  19. MySQL命令行操作
  20. linux - 守护进程

热门文章

  1. 配置h3c s5130-28s-si,绑定ip+mac
  2. 如何使用Arduino ESP32将数据存储到MicroSD(软SPI和硬SPI)
  3. python中filter函数的用法
  4. GXT的安装与第一个程序
  5. 垂直搜索架构(爬虫部分)
  6. CI框架学习笔记第三天
  7. MongoDB:一、MongoDB是什么?MongoDB的优缺点
  8. iframe src=”you page’s url” width=”100″ height=”30″ frameborder=”no” border=”0″ marginwidth=”0″ mar
  9. 定义一个正整数的数组arr,删除arr数组中指定索引的元素,删除元素后面的元素需要往前移动,并且最后的索引位置用-1补上
  10. 优秀课程案例:使用Scratch绘制3D多面体!