上上下下的字符串(模拟)

Posted fighting-sh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上上下下的字符串(模拟)相关的知识,希望对你有一定的参考价值。

上上下下的字符串

https://code.mi.com/problem/list/view?id=60&cid=0&sid=55230#codearea

描述

字符串 S 由字符 + 和 - 构成。字符串 D 是一个数字字符串,其长度比 S 要大 1,其格式要求如下:

  1. D 中不包含数字 0;
  2. D 中必须包含数字 1,且最大数字不大于 D 的长度;
  3. D 中的数字不重复出现。

根据 S,可以转换得到唯一的 D,S 与 D 的关系为:

  1. S[i] 为 + 表示 D[i] < D[i+1];
  2. S[i] 为 - 表示 D[i] > D[i+1],且 D[i] - D[i+1] = 1.

现给出字符串 S 的值,请构造出合法的字符串 D 。 如输入 +-+-,输出 13254,因为 1 < 3 > 2 < 5 > 4,符合增减增减(+-+-)的趋势。

输入

 

只由 + 和 - 构成的一个字符串。

 

输出

 

一个不含0且没有重复数字的字符序列。

 

输入样例

++++
----
+-+-++

 复制样例

输出样例

12345
54321
1325467


找出‘+‘的位置,‘-‘的位置的值与‘+‘的位置的值对比下就行了
技术分享图片
 1 #include<iostream>
 2 #include<cmath>
 3 #include<vector>
 4 #include<cstring>
 5 #include<string>
 6 #include<algorithm>
 7 #include<cstdio>
 8 #include<map>
 9 #include<queue>
10 #define maxn 200005
11 #define mem(a,b) memset(a,b,sizeof(a))
12 typedef long long ll;
13 using namespace std;
14 int a[10005];
15 
16 int main(){
17     string s;
18     while(cin>>s){
19         s="0"+s;
20         s+="+";
21         int co=1;
22         int minn=0x3f3f3f3f;
23         a[0]=1;
24         int pre=0;
25         int num=1;
26         for(int i=1;i<s.length();i++){
27             if(s[i]==+){
28                 a[pre]=num++;
29                 pre=i;
30             }
31             else{
32                 num++;
33             }
34         }
35         cout<<a[0];
36         num=a[0];
37         for(int i=1;i<pre;i++){
38             if(s[i]==-){
39                 cout<<--num;
40             }
41             else{
42                 cout<<a[i];
43                 num=a[i];
44             }
45         }
46         cout<<endl;
47     }
48 }
View Code

 




以上是关于上上下下的字符串(模拟)的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 中的 Android 片段模拟

当我想模拟数据并测试 UI 片段时,doNothing() 不起作用

google-map 片段应用程序在模拟器中崩溃后打开 WebView 活动

一个函数应该返回什么可以失败?

21个常用代码片段

windows上上传代码到Github