基本字符串压缩(程序员面试金典+string)字符串操作

基本字符串压缩

题目描述

利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。

给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。

测试样例

"aabcccccaaa"返回:"a2b1c5a3""welcometonowcoderrrrr"返回:"welcometonowcoderrrrr"

题目链接:?rp=1&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-the-coding-interview/question-ranking

题意很简单但要理解透彻,我一开始就想错了,,,看测试数据有时候还是挺管用的;

这题主要是string的操作,主要是数字转字符串的操作,类似于java中的to_string()操作,我模拟了下。可能不是最优解。但复杂度是O(n) 应该可以接受

#include<stdio.h>#include<string>using namespace std;class Zipper {public:string zipString(string iniString) {// write code herestring st="";if(iniString.size()==0) return st;st+=iniString[0];int cnt=1;for(int i=1;i<iniString.size();i++){if(iniString[i]!=iniString[i-1]){st+=to_string(cnt)+iniString[i];cnt=0;}cnt++;}st+=to_string(cnt);if(st.size()>=iniString.size()) return iniString;else return st;}string to_string(int n){int a[30],cnt=0;string s="";while(n){a[cnt++]=n%10;n/=10;}for(int i=cnt-1;i>=0;i–){s+=('0'+a[i]);}return s;}};int main(){Zipper zi;string s="aabcccccaaa";s=zi.zipString(s);for(int i=0;i<s.size();i++) printf("%c",s[i]);puts("");string ss="welcometonowcoderrrrr";ss=zi.zipString(ss);for(int i=0;i<ss.size();i++) printf("%c",ss[i]);puts("");return 0;}

版权声明:本文为博主原创文章,,未经博主允许不得转载。

人生的失败往往是在关键时刻少了坚持。

基本字符串压缩(程序员面试金典+string)字符串操作

相关文章:

你感兴趣的文章:

标签云: