LeetCode——字符串压缩

题目
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

输入:“aabcccccaaa”
输出:“a2b1c5a3”
示例2:

输入:“abbccd”
输出:“abbccd”
解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。
提示:

字符串长度在[0, 50000]范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compress-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:

string compressString(string S) {
	string f;
	string::iterator x = S.begin(); string::iterator y = x;
	while (y != S.end())
	{
		while ((y != S.end())&& (*y == *x))  y++;
		string num = to_string(y-x);
		f.push_back(*x); f += num; x = y;
	}
	if (f.size() >= S.size()) return S;
	else  return f;
}

运用迭代器就可以很好的表示。
需要注意的有:

  1. c++11标准中新加的包含在<string>头文件中的to_string()函数非常的香,可以把double、int等转为string。
    2.要写成(y != S.end())&& (*y == *x))而不是 ( (*y == *x)&&(y != S.end())),运用其断路特性,避免访问 *S.end()。
    c++11字符串和数字转换的函数:
    to_string(val) 返回数值val的string表达。val可以为任何算数类型。
    stoi(s,p,b) stol(s,p,b) stoul(s,p,b) stoll(s,p,b) stoull(s,p,b) stof(s,p,b) stod(s,p,b) stold(s,p,b) 返回s的起始子串表示数内容的数值。以上几个函数分别对应int、long、unsigned long、long long、unsigned long long、float、double、long double。b表示转换所用的基数,默认是10。p是size_t指针,用来保存s中第一个非数值字符的下标,p的默认值是0,即函数不保存下标。
string s2 = "pi = 3.14";
	string s = "23.2";
	double d = stod(s2.substr(s2.find_first_of("+-.0123456789")));
	double sda = stod(s);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值