赞
踩
题目描述:
E-Another string problem_第五届太原理工大学程序设计竞赛新生赛(同步赛) (nowcoder.com)
对于两个字符串 sss 和 ttt ,若 可以通过 修改、删除或增加 sss 中的任意一个字符将 sss 变为 ttt ,则认为这两个字符串的编辑距离为 1 。注意,只能选择一个操作,例如如果选择修改一个字符就不能再增加或删除字符了。
给定两个由小写字母组成的不同的字符串 sss 与 ttt ,请判断这两个字符串编辑距离是否为 1 。
输入描述:
输入共两行,第一行一个字符串 sss ,第二行一个字符串 ttt 。保证每个字符串仅由小写字母组成,且长度不超过 10510^5105 。
输出描述:
如果编辑距离为 1 则输出 "YES" ,否则输出 "NO" 。
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int,int> pii;
- const int MAXN = 1e5+7;
- int main()
- {
- int cm =0;
- string a,b;
- cin>>a>>b;
- int flagg = 0;
- int flags = 0;
- if(a==b)
- {
- cout<<"YES";
- return 0;
- }
- else
- {
- int aa = a.size();
- int bb = b.size();
- if(a.size()==b.size())
- {
- for(int i=0;i<a.size();i++)
- {
- if(a[i]!=b[i])
- {
- flagg++;
- }
- }
- }
- else if(fabs(aa-bb)==1)
- {
- if(a.size()<b.size())
- {
- while(a.size()>0&&b.size()>0)
- {
- if(a[a.size()-1]==b[b.size()-1])
- {
- a.pop_back();
- b.pop_back();
- }
- else
- {
- if(a[a.size()-1]==b[b.size()-2])
- {
- b.pop_back();
- flags++;
- }
- else
- {
- cout<<"NO";
- return 0;
- }
- }
- }
- }
- else
- {
- while(b.size()>0&&a.size()>0)
- {
- if(a[a.size()-1]==b[b.size()-1])
- {
- a.pop_back();
- b.pop_back();
- }
- else
- {
- if(a[a.size()-2]==b[b.size()-1])
- {
- a.pop_back();
- flags++;
- }
- else
- {
- cout<<"NO";
- return 0;
- }
- }
- }
- }
- }
- else
- {
- cout<<"NO";
- return 0;
- }
- }
- if(flags<2 && flagg<2) cout<<"YES";
- else cout<<"NO";
- return 0;
- }
大模拟,没什么好说的
下面是柳某的代码:
- #include<bits/stdc++.h>
- using namespace std;
-
- const int MAX = 1000000;
- long long N, M, ans;
- string s1, s2;
- int main()
- {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- cin >> s1 >> s2;
- int A = s1.size(), B = s2.size();// s t
- int K = abs(A - B);
- bool f = 1;
- if (abs(A - B) >= 2)
- {
- cout << "NO" << endl;
- return 0;
- }
- else
- {
- for (int i = 0, j = 0; i < s1.size(); i++, j++)
- {
- if (s1[i] != s2[j])
- {
- if (A > B && s1[i + 1] == s2[j] && f)
- {
- i++;
- f = 0;
- }
- else if (A < B && s1[i] == s2[j + 1] && f)
- {
- j++;
- f = 0;
- }
- else
- K++;
- }
- }
- }
-
- if (K <= 1)cout << "YES";
- else
- cout << "NO";
- return 0;
- }
下面是莫某的代码:
- #include <bits/stdc++.h>
- using namespace std;
-
- string s, t;
-
- int main()
- {
- cin>>s>>t;
- int len1 = s.size();
- int len2 = t.size();
- // cout<<s<<'\n'<<t<<'\n';
- if(abs(len1-len2) > 1)
- {
- cout<<"NO";
- return 0;
- }
-
- if(len1 == len2)
- {
- int cnt = 0;
- for(int i=0; i<len1; i++)
- if(s[i] != t[i])
- {
- cnt++;
- if(cnt > 1)
- {
- cout<<"NO";
- return 0;
- }
- }
- cout<<"YES";
- }
-
- if(len1 < len2)
- {
- int cnt = 0;
- for(int i=0, j=0; i<len1 && j<len2; i++, j++)
- if(s[i] != t[j])
- {
- cnt++;
- if(s[i] != t[++j]) cnt++;
- if(cnt > 1)
- {
- cout<<"NO";
- return 0;
- }
- }
- cout<<"YES";
- }
-
- if(len1 > len2)
- {
- int cnt = 0;
- for(int i=0, j=0; i<len1 && j<len2; i++, j++)
- if(s[i] != t[j])
- {
- cnt++;
- if(s[++i] != t[j]) cnt++;
- if(cnt > 1)
- {
- cout<<"NO";
- return 0;
- }
- }
- cout<<"YES";
- }
- return 0;
- }
下面是陈某的代码:
- #include <bits/stdc++.h>
- using namespace std;
- int main(void){
- string s,ss;
- cin>>s>>ss;
- int x=s.size(),y=ss.size();
- //cout<<x<<y;
- if(s.size()==ss.size()){
- int flag=0;
- for(int i=0;i<s.size();i++){
- if(s[i]!=ss[i])flag++;
- }
- if(flag<=1)cout<<"YES";
- else cout<<"NO";
- }
- else if(fabs(x-y)==1){
- int flag=0;
- for(int i=0;i<(x>y?y:x);i++){
- if(x>y&&s[i+flag]!=ss[i]){flag++;i--;}
- else if(x<y&&s[i]!=ss[i+flag]){flag++;i--;}
- }
-
- if(flag<=1)cout<<"YES";
- else cout<<"NO";
- }
- else cout<<"NO";
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。