首页 > 其他分享 >NOJ[1143] 字母转换

NOJ[1143] 字母转换

时间:2023-09-28 09:34:05浏览次数:46  
标签:1143 进栈 NOJ int str2 字母 字符串 include str1

描述:

通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(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 <cstring>
#include <stack>
using namespace std;

char str1[20], str2[20];
stack <char> a;
char ans[40];
int len1, len2;
void dfs(int t, int num1, int num2);
void output();

int main()
{
	while (cin >> str1 >> str2)
	{
		len1 = strlen(str1);
		len2 = strlen(str2);
		cout << "[" << endl;
		if (len1 == len2)
		{
			dfs(0, 0, 0);
		}
		cout << "]" << endl;
	}
}

void dfs(int t, int num1, int num2)
{
	if (t == 2 * len1)
	{
		output();
		return;
	}
	if (num1 < len1)
	{
		ans[t] = 'i';
		a.push(str1[num1]);
		dfs(t + 1, num1 + 1, num2);
		a.pop();
	}
	if (!a.empty() && a.top() == str2[num2])
	{
		ans[t] = 'o';
		char temp = a.top();
		a.pop();
		dfs(t + 1, num1, num2 + 1);
		a.push(temp);
	}
}

void output()
{
	for (int i = 0; i < 2 * len1 - 1; i++)
	{
		cout << ans[i] << " ";
	}
	cout << ans[2 * len1 - 1] << endl;
}

标签:1143,进栈,NOJ,int,str2,字母,字符串,include,str1
From: https://www.cnblogs.com/hello33mao/p/17734880.html

相关文章

  • 案例6:输入一个小写字母,然后输出一个大写字母
    本题主要是考察大小写字母的转换,大写字母A~Z的ascii码分别是65~90,小写字母a~z的ascii码分别是97~122,它们之间的差值是32。比如小写字母a的ascill码的值97,减去大写字母A的ascii的值65,结果为32。示例代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidmain(){......
  • 随想录Day5|242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
    随想录Day5|242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和 242.有效的字母异位词文章&视频讲解给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。1......
  • jQuery对输入框进行验证,只允许输入字母和数字
    使用jQuery来对这两个输入框进行验证,确保只允许输入字母和数字,不允许输入中文字符。以下是相应的示例代码:<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scriptsrc="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js&qu......
  • Excel_复杂文本字母数字混合排序
     引ADC_DCAL_DN1[13:0]ADC_DCAL_DN10[13:0]ADC_DCAL_DN11[13:0]ADC_DCAL_DN2[13:0]ADC_DCAL_DN3[13:0]ADC1_EOCADC10_EOCADC11_EOCADC2_EOCADC3_EOCADC4_EOCADC5_EOCADC_CALCB1_CALI_ADC[7:0]CB1......
  • Flutter TextField 限制只允许输入数字、小数、字母
    FlutterTextField限制只允许输入数字、小数、字母-flutter教程-IT逐梦人http://www.fc-home.cn/article/57.html【Flutter】五、Flutter之表单输入框——TextField_fluttertextfield验证_MAXLZ的博客-CSDN博客https://blog.csdn.net/qq_33635385/article/details/10004......
  • 洛谷 P1143. 进制转换
    进制转换题目描述请你编一程序实现两种不同进制之间的数据转换。输入格式共三行,第一行是一个正整数,表示需要转换的数的进制$n\(2\len\le16)$,第二行是一个$n$进制数,若$n>10$则用大写字母$\verb!A!\sim\verb!F!$表示数码$10\sim15$,并且该$n$进制数对应的十进制的......
  • KingbaseESV8R6汉字首字母排序
    目的本文目的实现汉字首字母排序。排序规则和字符集的关系如下。selectsys_encoding_to_char(collencoding)asencoding,collname,collcollate,collctypefromsys_collation;按照UTF8字符集匹配中文排序规则如下。selectcollcollatefromsys_collationwheresys_encod......
  • C# 数字后面有个M字母 所代表的含义,还有哪些类似的字母
    在C#中,数字后面的"M"表示该数字是一个双精度(decimal)类型的数值。双精度类型是C#的一种数据类型,用于存储较大范围和更高精度的十进制数值。通过在数字后面添加"M",可以告诉编译器将该数字解析为双精度类型。例如,你可以使用以下方式声明一个双精度类型的数值:decimalnumber=10.5M;......
  • mysql 获取第一个汉字首字母
    selectdmlb,dmz,dmsm1,CHAR(INTERVAL(CONV(HEX(left(convert(dmsm1usinggbk)collategbk_chinese_ci,1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0......
  • 英语中的辅音字母和元音字母分别是哪些
    在英语中,辅音字母和元音字母是不同的字母分类。以下是英语常见的辅音和元音字母列表:辅音字母:b,c,d,f,g,h,j,k,l,m,n,p,q,r,s,t,v,w,x,y,z元音字母:a,e,i,o,u需要注意的是,有时候字母"y"也可以作为元音字母使用,例如在单词"happy"中的/i/音素。......