PAT1078字串壓縮與解壓(java實現)
題目描述:
文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的一個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。
解壓方法就是反過來,把形如 5c 這樣的表示恢復為 ccccc。
本題需要你根據壓縮或解壓的要求,對給定字串進行處理。這裡我們簡單地假設原始字串是完全由英文字母和空格組成的非空字串。
-
輸入格式:
輸入第一行給出一個字元,如果是 C 就表示下面的字串需要被壓縮;如果是 D 就表示下面的字串需要被解壓。第二行給出需要被壓縮或解壓的不超過 1000 個字元的字串,以回車結尾。題目保證字元重複個數在整型範圍內,且輸出檔案不超過 1MB。 -
輸出格式:
根據要求壓縮或解壓字串,並在一行中輸出結果。
解題思路:這道題首先先用一個字元接收後判斷是壓縮還是解壓,如果是壓縮,for迴圈以字元遍歷,字元相同index++否則就通過append方法將此字元接到結果字串上。解壓通用for迴圈遍歷,但是不同的是如果接收到數字後要將對應的字元輸出num遍
易錯點:解壓時要注意有的字元出現可能幾十次幾百次,這裡也卡了好久,後面看別人程式碼num =num * 10 + (now - ‘0’)很nice的解決了這個問題
程式:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
char a = bf.readLine().charAt(0);
char[] b = bf.readLine().toCharArray();
StringBuilder output = new StringBuilder();
if (a=='C') {
char c = b[0];
int index = 1;
for (int i = 1; i < b.length; i++) {
char now = b[i];
if (now==c) {
index++;
if (i==b.length-1) {
output.append(index);
}
}else {
if (index!=1) {
output.append(index);
}
output.append(c);
c = now; //將下一個字元作為比較字元
index = 1; //更新該字元出現的次數
}
}
output.append(c);
System.out.println(output);
}
if (a=='D') {
int num = 0;
for (int i = 0; i < b.length; i++) {
char now = b[i];
//判斷第i個字元是不是數字
if (now>='0'&&now<='9') {
num =num * 10 + (now - '0');//這行程式碼解決了如果數字不是一位數的問題
//num = Integer.parseInt(String.valueOf(now));
}else {
if (num==0) {
output.append(now);
}
for (int j = 0; j < num; j++) {
output.append(now);
}
num = 0;
}
}
System.out.println(output);
}
}
}
相關文章
- PAT-B 1078 字串壓縮與解壓【字串】字串
- C++ MiniZip實現目錄壓縮與解壓C++
- 用ASP實現線上壓縮與解壓縮功能程式碼
- Python實現壓縮和解壓縮Python
- Linux tar分卷壓縮與解壓縮Linux
- Linux 常用的壓縮與解壓縮命令詳解Linux
- Java實現壓縮資料夾Java
- 哈夫曼實現檔案壓縮解壓縮(c語言)C語言
- 壓縮Word,一鍵實現Word文件壓縮
- Java實現解壓縮檔案和資料夾Java
- CentOS 壓縮解壓CentOS
- Linux壓縮解壓Linux
- java實現字元壓縮演算法Java字元演算法
- linux下壓縮解壓縮命令Linux
- Linux下檔案的壓縮與解壓Linux
- linux 下壓縮與解壓資料夾Linux
- linux分卷壓縮解壓Linux
- linuxtar解壓和壓縮Linux
- 實用的壓縮解壓工具:WinZip for MacMac
- 字串壓縮(一)之ZSTD字串
- Linux科研武器庫 - 檔案壓縮與解壓縮 - zip / unzipLinux
- NET中SharpZipLib 的使用(一)【壓縮與解壓】
- 分卷壓縮怎麼解壓 快速解壓電腦分卷壓縮檔案方法
- Redis 設計與實現 5:壓縮列表Redis
- linux 高效壓縮工具之xz的壓縮解壓使用Linux
- Golang 學習筆記(五)- archive/zip 實現壓縮及解壓Golang筆記Hive
- .NET 壓縮/解壓檔案
- Keka for Mac壓縮解壓工具Mac
- Keka for Mac(壓縮解壓工具)Mac
- Linux打包壓縮解壓工具Linux
- MyZip for mac解壓壓縮工具Mac
- Nginx R31 doc-11-Compression and Decompression 壓縮與解壓縮Nginx
- Java 實現壓縮圖片,影片,音訊案例Java音訊
- Linux常用命令之檔案壓縮與解壓縮命令詳解Linux
- Linux下的tar壓縮解壓縮命令詳解Linux
- JNI實現圖片壓縮
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- Golang 學習筆記(四)- archive/tar 實現打包壓縮及解壓Golang筆記Hive