NOJ1143 字母转换
来源:互联网 发布:linux 赋值 命令结果 编辑:程序博客网 时间:2024/06/10 09:03
描述
通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(i表示进栈,o表示出栈),使得字符串2在求得的进出栈序列的操作下,变成字符串1。输出结果需满足字典序。例如TROT 到 TORT:
[
i i i i o o o o
i o i i o o i o
]
输入
给定两个字符串,第一个字符串是源字符串,第二个字符是目标目标字符串。
输出
所有的进栈和出栈序列,输出结果需满足字典序
输入样例
madam adamm bahama bahama long short eric rice
输出样例
[ i i i i o o o i o o i i i i o o o o i o i i o i o i o i o o i i o i o i o o i o ]
[ i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i i o o o i o i o i o i o i o i o ]
[ ]
[ i i o i o i o o ]
【分析】
先生成排列,再依次判断。
#include <iostream>#include <algorithm>#include <stack>#include <string>#include <cstring>using namespace std;const int maxn = 100 + 5;char A[maxn];bool isStack(string s1, string s2) { int len1 = s1.length(); int k1 = 0, k2 = 0; stack<char> s; for(int i = 0; i < 2*len1; i++) { if(A[i] == 'i') s.push(s1[k1++]); else { if(s.empty() || s.top() != s2[k2]) return false; else s.pop(), k2++; } } return true;}int main() { string s1, s2; while(cin >> s1 >> s2) { cout << "[ "; int len1 = s1.length(); for(int i = 0; i < len1; i++) A[i] = 'i', A[i+len1] = 'o'; do { if(count(A, A+2*len1, 'i') == len1 && A[2*len1-1] == 'o' && isStack(s1, s2)) { for(int i = 0; i < 2*len1; i++) cout << A[i] << " "; } } while(A[0] == 'i' && next_permutation(A, A+2*len1)); cout << "]" << endl; } return 0;}
1 0
- NOJ1143 字母转换
- 字母转换
- 字母转换
- 字母转换
- 转换字母
- 字母转换
- 字母转换
- 字母转换
- 字母的大小写转换
- 汉字转换为首字母
- 转换字母的大小写
- js大小写字母转换
- 字母大小写转换
- java 大小写字母转换
- js字母大小写转换
- flash字母转换工具
- 大小写字母的转换
- PHP字母大小写转换
- C++ Builder 设置系统时间格式
- 条形码、二维码以及二维码添加logo
- CodeForces-630B:Moore's Law【水】
- linux 比较两个文件夹下的内容
- KVO and KVC
- NOJ1143 字母转换
- 推荐一个设置鼠标cursor图标的网站、将PNG转换成ICO
- mysql int转换成string时类型要用char
- CODEFORCES630D-Hexagons!
- JavaScript学习 - 数组
- FPGA定时器的计数设置,是否要减1?(精密计数)
- IntelliJ-Idea工具的常用快捷键和在html里的常用快捷键
- 我的2015
- LEETCODE 125