C - Word Ladder题解

C - Word Ladder 题解

解题思路:

先输入两个字符串St

然后在ST中寻找有多少个字符不同的个数(也就是需要变换多少次)

开始替换时:
tips: 字符串下标以0开始

我们定义两个变量a和b,用于记录当前遍历到的字符

首先是判断:如果这时a已经==b了,那么就跳过,不用管;

如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。

这样输出可以免了还要搞个string类数组去存一大堆东西,搞不好还容易错

然后再倒过来看:

还是熟悉的a=s[i],b=t[i],还是熟悉的判断,但是这一次我们是查漏补缺(也就是看看哪个地方还没改为t的样子)

为什么第一次不直接全部替换掉而第二次又来从后往前找呢?

因为第一次找我们要保证『字符串数组的词典顺序』,而第二次从后往前就是找那个还没换成T而已.

上代码:

#include 		// 基本输入输出流
#include 	// 通用算法(排序、查找、去重、二分查找等)
#include 		// 动态数组(空间不够会自动扩容)
#include 		// 队列(先进先出)
#include 		// 栈(先进后出)
#include 			// 集合(有序不重复)
#include 			// 键值对容器(映射)
#include 			// 双向链表
#include 		// 数学函数
#include 	// 通用的函数绑定和调用机制

#define endl '\n'
#define pii pair<int, int>
#define pdd pair<double, double>
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define int long long
using namespace std;

const int inf = 1e9 + 7;
const int mod = 998244353;
const int N = 2e5 + 10, M = N << 1;
char a, b;
int m;
void solve() {
	string s, t;
	cin >> s >> t;
	int n = s.size();
	for(int i = 0; i < n; i++){
		if(s[i] != t[i]) m++;
	}
	cout << m << endl;
	for(int i = 0; i < n; i++){
		a = s[i], b = t[i];
		if(a == b)
			continue;
		if(a > b){
			s[i] = b;
			cout << s << endl;
		}
	}
	for(int i = n - 1; i >= 0; i--){
		a = s[i], b = t[i];
		if(a == b) 
			continue;
		s[i] = b;
		cout << s << endl;
	}
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int t = 1;
	while(t--) solve();
	return 0;
}

完结!

你可能感兴趣的:(这是题解,C++,c语言,word,开发语言,动态规划,大数据,算法,c++)