試題 算法提高 字符串壓縮
題目描述:
資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
編寫一個程序,輸入一個字符串,然後採用如下的規則對該字符串當中的每一個字符進行壓縮:
(1) 如果該字符是空格,則保留該字符;
(2) 如果該字符是第一次出現或第三次出現或第六次出現,則保留該字符;
(3) 否則,刪除該字符。
例如,若用戶輸入“occurrence”,經過壓縮後,字符c的第二次出現被刪除,第一和第三次出現仍保留;字符r和e的第二次出現均被刪除,因此最後的結果爲:“ocurenc”。
輸入格式:輸入只有一行,即原始字符串。
輸出格式:輸出只有一行,即經過壓縮以後的字符串。
輸入輸出樣例
樣例輸入
occurrence
樣例輸出
ocurenc
題目很簡單,只是需要考慮全面。
AC代碼:
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
char a[100];
char ans[100];
int book[100];//代表a字符數組中每個索引位置的字母在當前索引位置的第幾次出現
int cnt[1000];//記錄所有字符當前索引位置出現的總次數
int main()
{
int i;
gets(a);//注意這個輸入,不能使用cin和scanf(因爲有空格)
for(i=0;i<strlen(a);i++)
{
if(a[i]==' ')//如果該索引位置字符爲空格,則無需計數
continue;
int temp=(int)a[i];
cnt[temp]++;
book[i]=cnt[temp];
}
int k=0;
for(i=0;i<strlen(a);i++)
{
if(a[i]==' ')
ans[k++]=a[i];
else if(book[i]==1||book[i]==3||book[i]==6)
ans[k++]=a[i];
}
for(i=0;i<k;i++)
cout<<ans[i];
cout<<endl;
return 0;
}