字符串压缩
题目描述
- 给定一个由若干大小写英文字母组成的字符串 message。
- 利用字符重复出现的次数,将字符串 message 进行压缩。
- 若压缩后的字符串没有变短,则返回原来的字符串
- 示例:
# 输入:
str = " aaaaabbbbbbcccccccA"
# 输出:
str = "a5b6c7A1"
# 输入:
str = "abcd"
# 输出:
str = "abcd"
解题思路
-
遍历字符串:遍历字符串中的每个字符,并统计每个字符的出现次数。
-
构建压缩字符串:根据字符的出现次数构建压缩后的字符串。
-
比较长度:如果压缩后的字符串比原始字符串短,则返回压缩后的字符串,否则返回原始字符串。
作答模板
python
模板
def compress_string(message):
"""
中间是你要实现的代码
"""
return result
java
模板
public class Solution {
public String compressString(String message) {
// 中间是你要实现的代码
return result;
}
}
参考答案
- python
## 字符串压缩函数
def compress_string(message):
# 4.5 补充特殊情况字符串为空,直接进行返回
if not message:
return message
# 1.先创建用来存储压缩后的字符串对象
result = ""
# 2.创建用于统计字符数量的对象
count = 1
# 3.计算message字符串的长度,用来控制循环的次数。
lens = len(message)
# 4. 遍历整个字符串
for i in range(lens - 1):
# 4.1 判断临近的字符内容是否相等
if message[i] == message[i+1]:
# 4.2 如果相等,说明字符相同,需要统计次数加一
count += 1
else:
# 4.3 如果元素不同,进行字符串的拼接通过(当前元素+数量值),重置统计次数的变量值:1
result += message[i] + str(count)
count = 1
# 处理最后一次字符串连接的结果
else:
result += message[-1] + str(count)
# 4.4 回传结果
return result if len(result) < len(message) else message
def main():
# 1. 接收用户的输入
user_input = input("请输入要压缩的字符串:")
# 2.传递接收的用户字符串
print("这是压缩后的字符串结果:",compress_string(user_input))
# 运行主函数
if __name__ == '__main__':
main()
- java
package 字符串压缩;
import java.util.Scanner;
public class StringCompressor {
public static String compressString(String message) {
// 5. 补充如果message为空,直接返回原字符串
if (message == null || message.isEmpty()){
return message;
}
// 1.定义用于存储压缩后的字符串
String result = "";
// 2.定义一个用来存储字符数量的变量
int count = 1;
// 3.遍历字符串message,从第一个元素遍历到最后
for (int i= 0;i < message.length()-1;i++){
// 3.1 比较当前的元素和下一个元素是否相同
if (message.charAt(i) == message.charAt(i+1)){
// 3.1.1 元素相等,计数值+1
count ++;
}else {
// 3.1.2 元素不同,拼接字符串,重置计数变量
result += message.charAt(i) + String.valueOf(count);
count = 1;
}
}
// 4.处理最后一个字符以及它的计数
result += message.charAt(message.length() - 1) + String.valueOf(count);
// 5.通过判断压缩前后字符串的长度,来返回对应字符串
return result.length() < message.length() ? result : message;
}
public static void main(String[] args) {
// 创建扫描器对象,来接收用户的输入
Scanner scanner = new Scanner(System.in);
// 提示用户输入
System.out.println("请用户输入要压缩的数据:");
String userInput = scanner.nextLine();
System.out.println("压缩结果为:" + compressString(userInput));
// 关闭扫描器
scanner.close();
}
}