【问题标题】:Reduce a string when it has a pair当它有一对时减少一个字符串
【发布时间】: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;

}

【问题讨论】:

  • 似乎模棱两可。 “尽可能多地做”是什么意思?遇到第一对后你会重新开始吗?

标签: string c++14


【解决方案1】:
#include <iostream>
using namespace std;

int main(){

string s,tempS;
bool condition = false;
cin >> s;
tempS = s;
while(condition==false){
    for(int i=1; i<s.size(); i++){
        if(s[i]==s[i-1]){
            s.erase(s.begin()+i-1, s.begin()+i+1);
        }
    }
    if(tempS == s){
        condition = true;
    } else{
        tempS = s;
    }
}

if(s.size()==0){
    cout << "Empty String" ;
} else{
    cout << s;
}

return 0;
}

第一个 while 循环继续修改字符串,直到并且除非它等于 temp(等于字符串预修改) 它正在比较相邻元素是否相等,然后将它们都删除。 修改后,一旦字符串变为等于 temp,则字符串已达到其最简化状态!

【讨论】:

  • 纯代码答案没有帮助。请包含一段突出代码的作用或使用的逻辑。
猜你喜欢
  • 2019-08-08
  • 1970-01-01
  • 2023-04-05
  • 2021-05-26
  • 2021-07-23
  • 2021-11-16
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多