首页 > 试题广场 >

字符串压缩算法

[编程题]字符串压缩算法
  • 热度指数:5955 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一串字符,请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。
例如:
aac 压缩为 1ac
xxxxyyyyyyzbbb 压缩为 3x5yz2b



输入描述:
任意长度字符串


输出描述:
压缩后的字符串
示例1

输入

xxxxyyyyyyzbbb

输出

3x5yz2b
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] ch = str.toCharArray();
        for(int i = 0;i < ch.length;i++){
            int count = 0;
            while(i < ch.length - 1 && ch[i] == ch[i+1]){
                count++;
                i++;
            }
            if(count != 0){
                System.out.print(count);
            }
            System.out.print(ch[i]);
        }
            System.out.println();
    }
}

发表于 2022-04-14 16:58:11 回复(0)
/*
思路二:不断寻找每次字符重复的情况,然后将它导入到StringBuffer中
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        StringBuffer sb = new StringBuffer();
        for(int i = 0,eindex = 0;i<str.length();){
            char ch = str.charAt(i);
            int count = 0;
            while(eindex < str.length() && ch==str.charAt(eindex)){
                count++;
                eindex++;
            }
            if(count==1)
                sb.append(ch);
            else
                sb.append(count - 1).append(ch);
            i = eindex;
        }
        System.out.println(sb.toString());
        
    }
}

发表于 2020-05-22 15:10:10 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder(br.readLine());
        sb.append('#');
        StringBuilder res = new StringBuilder();
        int count = 1;
        for (int i = 0; i < sb.length() - 1; i++) {
            if (sb.charAt(i) == sb.charAt(i + 1)) {
                count++;
            } else {
                if (count > 1) {
                    res.append(count - 1);
                }
                res.append(sb.charAt(i));
                count = 1;
            }
        }
        System.out.println(res.toString());
    }
}
编辑于 2019-08-20 17:21:31 回复(0)
import java.util.Scanner;
public class Condense {
 public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 System.out.println("请输入字符串:");
 String s = scanner.nextLine();
 getNumFromString(s);
}

private static void getNumFromString(String string) {
    StringBuilder sb = new StringBuilder();
    char c = string.charAt(0);
    int count = 1;
    for (int i = 1; i < string.length(); i++) {
        char s = string.charAt(i);
        if (s == c) {
            count++;
        } else {

            if (count > 1) {
                sb.append(count);
                sb.append(c);
                count = 1;
            } else {
                sb.append(c);
            }
        }
        c = s;
    }
    sb.append(c);
    System.out.println(sb.toString());

}

}

编辑于 2019-05-10 21:00:20 回复(0)