【发布时间】:2017-07-11 05:33:06
【问题描述】:
Shil 有一个字符串 S ,由 N 个小写英文字母组成。在一次操作中,他可以删除任意一对具有相同值的相邻字母。例如,字符串“aabcc”在操作后会变成“aab”或“bcc”。
Shil 想尽可能地减少 S。为此,他将尽可能多地重复上述操作。通过查找和打印 的不可约形式来帮助 Shil!
如果最终字符串为空,则打印 Empty String;否则,打印最终的不可约字符串。
样本输入 0
aaabccddd
样本输出 0
abd
示例输入 1
呸
样本输出 1
空字符串
示例输入 2
啊
样本输出 2
空字符串 说明
Sample Case 0:Shil 可以执行以下操作序列来得到最终的字符串:
因此,我们打印。
Sample Case 1:Shil 可以执行以下操作序列得到最终的字符串:aaabccddd -> abccddd
abccddd -> abddd
abddd -> abd
因此我们打印 abd
示例案例 1:baab -> bb
bb -> 空字符串。
当我将 s[i] 分配给 str[i] 时,在 while 循环中的代码中。s[i] 的值没有分配给 str[i]。str[i] 具有垃圾值。
我的代码:
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
string s;
cin>>s;
int len = s.length();
int len1 = 0;
string str;
for(int i = 0;i < len-1;i++){
if(s[i]!= '*'){
for(int j=i+1;j < len;j++){
if(s[j] != '*'){
if(s[i] == s[j]){
s[i] = s[j] = '*';
}
}
}
}
}
int i = 0;
while(i<len){
if(s[i] != '*'){
str[len1] = s[i];
len1++;
}
i++;
}
if(len1 != 0){
cout<<str;
}
else{
cout<<"Empty String";
}
return 0;
}
【问题讨论】:
-
似乎模棱两可。 “尽可能多地做”是什么意思?遇到第一对后你会重新开始吗?