传送门:点击打开链接
题意:定义一次操作。能够在随意一个字符a后面插入一个不等于a字符的随意字符。问能否将s串变成t串
思路:感觉这样的构造和模拟的题目做少了Orz
首先我们能够发现。假设是开头。第一个字符必需要一样,设第一个字符为f
那么前面连续的假设两个都等于f,就把指针都后移。直到两个中的某一个指针到末了。或者两者不再相等。才跳出循环
然后推断是否是指针到末端了,对于i和j到末端的推断不一样,须要细致推断一下。
然后假设两者如今不相等,也不能有B[j] == f.由于B[j]是无法在f后面插入的,由于两者一样
然后最终把特殊情况所有考虑完了~
处理到这里后。后面的部分全然能够觉得是能够插入在随意一个字符a后面插入随意一个字符包含字符a,由于在插入位置的前面绝对会存在不是a字符的。仅仅要在那里插入a字符就能够达到效果并满足题意。所以后面的部分就非常好模拟了
#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define FIN freopen(","r",stdin)
#define FOUT freopen(","w+",stdout)using namespace std;
typedef long long LL;
typedef pair<int, int> PII;const int MX = 1e5 + 5;char A[MX], B[MX];bool solve(char *A, char *B) {if(A[0] != B[0]) return false;int f = A[0];int m = strlen(A), n = strlen(B), i = 1, j = 1;while(i < m && j < n && A[i] == B[j] && A[i] == f) i++, j++;if(j == n) return i == m;if(i == m) return B[j] != f;if(B[j] == f) return false;while(true) {if(i == m) return true;if(j == n) return false;if(A[i] == B[j]) i++, j++;else j++;}
}int main() {int T;//FIN;scanf("%d", &T);while(T--) {scanf("%s%s", A, B);printf("%sn", solve(A, B) ? "Yes" : "No");}
}
转载于:.html
本文发布于:2024-01-30 18:12:26,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170660954721886.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |