原题:

443. String Compression

解题:

看到题目就想到用map计数,然后将计数的位数计算处理,这里的解法并不满足题目的额外O(1)的要求,并且只是返回了结果array的长度,并未修改原始vector的元素。

代码如下:

class Solution {
public:
int bitsOfNumber(int n)
{
int cnt = 0;
if (n <= 1) return 0; //若为1,则不增加
while(n) //统计位数,如12就是2位
{
cnt++;
n /=10;
}
return cnt;
}
int compress(vector<char>& chars)
{
int size = chars.size();
int i = 0;
int sum = 0;
map <char, int> mapchar;
map <char, int>::iterator it;
for(;i < size;i++)
{
mapchar[chars[i]]++; //统计各个字符个数
}
it = mapchar.begin();
while(it != mapchar.end())
{
if(it->second != 0) //如果有这个字符
{
sum += bitsOfNumber(it->second) + 1; //字符本身也占据一个元素位置,所以要加1
}
it++;
}
return sum;
}
};

  AC代码如下:

class Solution {
public:
int compress(vector<char>& chars) {
int len = chars.size() ;
if (len < 2)
return len ;
int res = 0 ;
char c = chars[0] ;
int num = 1 ;
chars.push_back(' ') ;
for(int i = 1 ; i < len+1 ; i++){
if (chars[i] == chars[i-1])
num++ ;
if (chars[i] != chars[i-1] ){
chars[res++] = c ;
if (num > 1){
string s = to_string(num) ;
for(int j = 0 ; j < s.size() ; j++){
chars[res++] = s[j] ;
}
}
num = 1 ;
c = chars[i] ;
}
}
return res ;
}
};

  

443. String Compression的更多相关文章

  1. 【leetcode】443. String Compression

    problem 443. String Compression Input ["a","a","b","b"," ...

  2. 443. String Compression - LeetCode

    Question 443. String Compression Solution 题目大意:把一个有序数组压缩, 思路:遍历数组 Java实现: public int compress(char[] ...

  3. 443. String Compression字符串压缩

    [抄题]: Given an array of characters, compress it in-place. The length after compression must always b ...

  4. leetcode 443. String Compression

    下面反向遍历,还是正向好. void left(vector<char>& v, bool p(int)) { ; ; ; while (del < max_index) { ...

  5. LeetCode 443. String Compression (压缩字符串)

    题目标签:String 这一题需要3个pointers: anchor:标记下一个需要存入的char read:找到下一个不同的char write:标记需要存入的位置 让 read指针 去找到下一个 ...

  6. [LC] 443. String Compression

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

  7. 【LeetCode】443. String Compression 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 使用额外空间 不使用额外空间 日期 题目地址:htt ...

  8. 443 String Compression 压缩字符串

    给定一组字符,使用原地算法将其压缩.压缩后的长度必须始终小于或等于原数组长度.数组的每个元素应该是长度为1 的字符(不是 int 整数类型).在完成原地修改输入数组后,返回数组的新长度.进阶:你能否仅 ...

  9. LeetCode_443. String Compression

    443. String Compression Easy Given an array of characters, compress it in-place. The length after co ...

随机推荐

  1. Linux CentOS6.8 项目部署脚本实现

    面向刚接触linux环境的新手,老鸟勿拍~ 部署环境及配置: tomcat9,maven3.3.9,git 1.12.0 ##定义一些变量,将需要用到的 source目录,项目目录,名称等定义变量,方 ...

  2. mysql中有关查询的技巧方法

    * 查最高值或者最低值对应行的数据: 查询Score表中的最高分的学生学号和课程号: 两种方法(子查询或者排序): 子查询法:select sno,cno from score where degre ...

  3. Coprime Sequence (HDU 6025)前缀和与后缀和的应用

    题意:给出一串数列,这串数列的gcd为1,要求取出一个数使取出后的数列gcd最大. 题解:可以通过对数列进行预处理,求出从下标为1开始的数对于前面的数的gcd(数组从下标0开始),称为前缀gcd,再以 ...

  4. STL:unique()函数

    unique() unique()是剔除重复他是剔除相邻之间字符重复的,倘若其中中的字符前后之间是没有重复的,unique函数是起不到作用的,所以使用以前都会sort处理. unique()函数的返回 ...

  5. Android SDK的下载与安装

    一.Android SDK简介 Android SDK(Software Development Kit,软件开发工具包)被软件开发工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件 ...

  6. python魔法方法

    1.__call__ 实现__call__后,该类的对象可以被调用 举例如: class test_call_: def __init__(self, n): self.n = n def __cal ...

  7. _Bool and bool

    _Bool is the defined before C99. bool has been defined in C99. bool is an alias for _Bool if you inc ...

  8. set_false_path的用法

    set_false_path的用法 非功能性路径,因为两个多路选择器被相同的选择信号驱动? 上电复位信号 set_false两个异步时钟域的路径 在两个时钟域之间,设置set_false_path,应 ...

  9. maya中MFnMesh.h使用说明的翻译

    由于最近要修改一个maya中的deformer脚本,于是开始系统学习openMaya的一些知识,当然少不了得把一堆头文件说明看一遍.首先把MFnMesh.h这个文件翻译一下吧,不废话,上译文: 首先M ...

  10. 对中断interrupt的理解

    一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...