下面反向遍历,还是正向好。

    void left(vector<char>& v, bool p(int)) {
int max_index = v.size() - ; int del = -;
int rel = -;
while (del < max_index) {
while (p(v[del]) && del < max_index)
del++;
if (del >= max_index)
break;
if (rel < del)
rel = del;
while (!p(v[rel]) && rel <= max_index)
rel++;
if (rel > max_index)
break;
swap(v[del], v[rel]);
del++;
}
} int compress(vector<char>& chars) {
int size = chars.size();
int point = size - ;
int count = ;
for (int i = point; i >= ; i--) {
if (chars[i] == chars[i - ] && i > )
count++;
else if (count > ) {
for (int j = count - ; j > ; j--)
chars[i + j] = ;
string temp = to_string(count);
for (int j = ; j < temp.size(); j++)
chars[i + j + ] = temp[j];
count = ;
}
}
left(chars, [](int v) {return v != ;});
return count_if(chars.begin(), chars.end(), [](int v) {return v != ;});
}

其他答案:

    int compress(vector<char>& chars) {
int lo=;
int cnt=;
for(int i=; i<chars.size(); i++){
cnt++;
if(i==chars.size()-||chars[i]!=chars[i+]){
chars[lo++]=chars[i];
if(cnt>){
string nums=to_string(cnt);
for(int i=; i<nums.length(); i++){
chars[lo++]=nums[i];
}
}
cnt=;
}
}
return lo;
}

最新文章

  1. JAVA 读写Excel
  2. IntelliJ IDEA使用(二):tomcat和jetty配置
  3. charles 抓取eclipse中的请求
  4. linux-------------linux的scp
  5. linux网络:常用命令(一)
  6. [BZOJ 3530][Sdoi 2014]数数
  7. asp.net 运行时,&quot;未能映射路径&quot;
  8. codeforces A. Dima and Continuous Line 解题报告
  9. Spreadsheet Tracking
  10. 问题:关于贴友一个用js传递value默认值的简单实现
  11. Java工具类:获取long型唯一ID
  12. XML 标记使用的特殊字符对应内置实体
  13. protobuf的反射机制
  14. Strusts2--课程笔记4
  15. 强大的桌面用 PDF 重排工具:K2pdfopt 简明教程
  16. solr6.5搭建以及使用经验
  17. MySQL索引的使用
  18. NFS的搭建及配置
  19. bash 文件名操作 常用方法
  20. 【Java基础】10、Java中throw和throws的区别

热门文章

  1. windows下Jenkins环境搭建
  2. C# 如何利用反射,将字符串转化为类名并调用类中方法
  3. Service的启动,绑定,绑定后通信,跨应用绑定,跨应用绑定后通信
  4. CSS DISPLAY AND POSITIONING
  5. HTML Tables
  6. 优秀的 Go 存储开源项目和库
  7. js判断对象
  8. Web安全颜色
  9. linux初始化
  10. Spring容器中获取bean实例的方法