基本字符串压缩(软件工程师面试金典+string)字符串操作
基本字符串压缩(程序员面试金典+string)字符串操作
题目链接:http://www.nowcoder.com/practice/21f3a84300c94db092e0b5a7bf2d0ad1?rp=1&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-the-coding-interview/question-ranking
基本字符串压缩
- 参与人数:1661时间限制:3秒空间限制:32768K
- 通过比例:15.52%
- 最佳记录:0 ms|0K(来自 牛客游客)
题目描述
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。
测试样例
"aabcccccaaa"
返回:"a2b1c5a3"
"welcometonowcoderrrrr"
返回:"welcometonowcoderrrrr"
题意很简单但要理解透彻,我一开始就想错了,,,看测试数据有时候还是挺管用的;
这题主要是string的操作,主要是数字转字符串的操作,类似于java中的to_string()操作,我模拟了下。可能不是最优解。但复杂度是O(n) 应该可以接受
#include<stdio.h> #include<string> using namespace std; class Zipper { public: string zipString(string iniString) { // write code here string 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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。