题目大意
字符串压缩——下一字符串与其相邻的上一字符串相比较,如果具有相同的字符串首部,用该首部的长度(一个数字)替代该子串;如果没有相同的字符串首部,也要在首部加上一个‘0’。要求输出最终压缩后,所有字符串长度之和。
思路分析
利用两层循环,外层循环字符串,内层计算压缩后的长度,进行累加。
代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int maxn = 10010;
string str[maxn];
int main()
{
// freopen("input.txt", "r", stdin);
int n;
cin >> n;
if(n == 0)
{
cout << 0;
return 0;
}
int ans = 0;
cin >> str[0];
ans += str[0].size();
for(int i=1; i<n; i++)
{
cin >> str[i];
int len1 = str[i-1].size();
int len2 = str[i].size();
int len = min(len1, len2);
int common = 0;
for(int j=0; j<len; j++)
{
if(str[i-1][j] == str[i][j])
{
common++;
}
else
{
break;
}
}
if(common == 0)
{
ans += (len2 + 1);
}
else
{
ans += (len2 - common + 1);
}
}
cout << ans;
// fclose(stdin);
return 0;
}