版权声明:本文未经博主允许不得转载。 https://blog.csdn.net/pianzang5201/article/details/90815733
问题:
设计一种方法,通过给重复字符计数来进行基本的字符串压缩。
例如,字符串 aabcccccaaa
可压缩为 a2b1c5a3
。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。
可以假设字符串仅包括 a-z 的字母。
样例:
样例 1:
输入:str = "aabcccccaaa" 输出:"a2b1c5a3"
样例 2:
输入:str = "aabbcc" 输出:"aabbcc"
python:
class Solution:
"""
@param originalString: a string
@return: a compressed string
"""
def compress(self, originalString):
# write your code here
if originalString == None or len(originalString) <= 1:
return originalString
result = ""
result += originalString[0]
strIndex = 1
for i in range(1, len(originalString)):
if originalString[i] == originalString[i-1]:
strIndex += 1
else:
result += str(strIndex)
result += originalString[i]
strIndex = 1
result += str(strIndex)
if len(result) > len(originalString):
return originalString
for j in range(1, len(result),2):
temp = int(result[j])
if temp >= 3:
return result
return originalString
C++:
class Solution {
public:
/**
* @param originalString: a string
* @return: a compressed string
*/
string compress(string &originalString) {
// write your code here
if(originalString == "" || originalString.size() == 1)
{
return originalString;
}
string result = "";
result += originalString[0];
int strIndex = 1;
for(int i = 1; i < originalString.size(); i++)
{
if(originalString[i] == originalString[i-1])
{
strIndex++;
}else{
result += to_string(strIndex);
result += originalString[i];
strIndex = 1;
}
}
result += to_string(strIndex);
if(result.size() > originalString.size())
{
return originalString;
}
for(int j = 1; j < result.size(); j+=2)
{
int temp = int(result[j] - '0');
if(temp >= 3)
{
return result;
}
}
return originalString;
}
};