概述
题意
利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能
一、 字母有序
- 比如,字符串“aabccdd”会变成“a2b1c2d2”
- 若“压缩”以后的字符串没有变短,则返回原先的字符串。
假设字符串中只包含大小写英文字母(a-z)
示例 1:
输入:aabcccccddddd
输出:a2b1c5d5示例 2:
输入:abcdd
输出:abcdd
(因为压缩后的字符串为:”a1b1c1d2”,长度大于原字符串)
实现思路
循环遍历字符串中的每个字符,判断是否已存在,存在则计数,不存在则先保存字母再计数
代码实现
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入字符串:");
String s = input.nextLine();
String s1 = compress(s);
System.out.println("压缩后为:"+s1.toString());
}
public static String compress(String s){
StringBuffer newStr = new StringBuffer();
char ch = s.charAt(0);
int sum = 0;
for(int i = 0;i < s.length();i++){
if (ch == s.charAt(i)){
sum++;//对当前字符进行计数
}else {//当出现不一样的字母时
newStr.append(ch);//添加到新字符串中
newStr.append(sum);
sum = 1;//计数重新从0开始
ch = s.charAt(i);//更新字母
}
}
//添加最后一个字母
newStr.append(ch);
newStr.append(sum);
if(newStr.length() < s.length()){//返回短的字符串
return newStr.toString();
}else {
return s.toString();
}
}
}
二、 字母无序(字母穿插)
- 比如,字符串“aabccaabbccdd”会变成“a4b3c4d2”
- 若“压缩”以后的字符串没有变短,返回原先的字符串,如“abcabc”则返回原字符串
假设字符串中只包含大小写英文字母(a-z)
示例 1:
输入:aabccaabbccdd
输出:a4b3c4d2示例 2:
输入:abcabc
输出:abcabc
(因为压缩后的字符串为:”a2b2c2”,长度并不小于原字符串)
实现思路
用map进行存储,key-value分别存储字母及对应的数量
循环遍历字符串中的每个字符,判断是否已存在,存在则数量+1,不存在则先保存字母、字母初始数量为1
代码实现
public class Test2{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入字符串:");
String s = input.nextLine();
HashMap<Character, Integer> map = compress(s);//map存储
StringBuffer newStr = new StringBuffer();
for(Character key: map.keySet()){
newStr.append(key);
newStr.append(map.get(key));
}
if(newStr.length() < s.length()){//返回短的字符串
System.out.println(newStr.toString());
}else {
System.out.println(s.toString());
}
}
public static HashMap<Character, Integer> compress(String str) {
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0;i<str.length();i++){
if (map.containsKey(str.charAt(i)) == false) {//如果不包含该字母,添加
map.put(str.charAt(i), 1);//key,value(字母,数量)
}else {
int count = map.get(str.charAt(i))+1;//字母+1,即count++
map.put(str.charAt(i), count);//key,value(字母,数量)
}
}
return map;
}
}
最后
以上就是眯眯眼酸奶为你收集整理的字符串压缩(Java)题意的全部内容,希望文章能够帮你解决字符串压缩(Java)题意所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复