当前位置: 首页> 科技> 数码 > 算法练习题22——解码

算法练习题22——解码

时间:2025/7/12 7:58:45来源:https://blog.csdn.net/2302_78946634/article/details/142108550 浏览次数:0次

问题描述

小明有一串很长的英文字母,其中可能包含大写和小写字母。在这串字母中,有很多字母是连续且重复的。为了压缩这串字母的表达形式,小明决定将连续相同的字母用“字母 + 出现次数”的形式表示。

例如:

  • 连续的5个字母 a,即 aaaaa,可以简写成 a5
  • 同理,字符串 HHHellllloo 可以简写为 H3el5o2

但是为了方便表达,简写形式中连续相同的字母的次数不会超过9。

现在给出简写后的字符串,请帮助小明将其还原成原来的字符串。

输入格式:

  • 一行包含一个简写的字符串,字符串由大小写英文字母和数字组成,长度不超过 100。

输出格式:

  • 输出还原后的字符串。

约定:

  • 简写中的字母重复次数不会超过9。
  • 原始字符串的长度可能超过100。

代码

C++

#include<bits/stdc++.h> 
using namespace std;
int main(){char s[101];cin>>s;int length;length=strlen(s);for(int i=0;i<length;i++){if(s[i+1]>'1'&&s[i+1]<='9'){for(char j ='1';j<=s[i+1];j++){cout<<s[i];}i++;}else cout<<s[i];}
}

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = scanner.next();  // 读取输入的字符串int length = s.length();  // 获取字符串的长度for (int i = 0; i < length; i++) {// 判断当前字符的下一个字符是否为 '1' 到 '9' 之间的数字if (i + 1 < length && s.charAt(i + 1) > '1' && s.charAt(i + 1) <= '9') {// 输出当前字符 s.charAt(i) 多少次,这个次数由下一个字符 s.charAt(i + 1) 决定for (char j = '1'; j <= s.charAt(i + 1); j++) {System.out.print(s.charAt(i));}i++;  // 跳过下一个字符,因为它是数字,已经被处理过了} else {// 如果下一个字符不是数字,就直接输出当前字符System.out.print(s.charAt(i));}}}
}

健壮版Java

import java.util.Scanner;public class DecodeString {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 输入简写后的字符串String input = scanner.nextLine();// 用于存储解码后的原始字符串StringBuilder decodedString = new StringBuilder();int length = input.length(); // 获取输入字符串的长度for (int i = 0; i < length; i++) {char currentChar = input.charAt(i); // 当前字符// 检查当前字符是否是字母if (Character.isLetter(currentChar)) {decodedString.append(currentChar); // 先输出当前字母// 检查下一个字符是否是数字if (i + 1 < length && Character.isDigit(input.charAt(i + 1))) {int count = input.charAt(i + 1) - '0'; // 将数字字符转换为对应的整数for (int j = 1; j < count; j++) {decodedString.append(currentChar); // 输出当前字母 count-1 次}i++; // 跳过数字部分}}}// 输出解码后的字符串System.out.println(decodedString.toString());scanner.close(); // 关闭 Scanner}
}
关键字:算法练习题22——解码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: