LeetCode每日一题
433. 最小基因变化
hash+bfs
class Solution {
public:
int minMutation(string start, string end, vector<string>& bank) {
unordered_set<string>cnt;
unordered_map<string,bool>st;
unordered_map<string,int>dist;
char word[4]={'A','C','G','T'};
for(auto x:bank)cnt.insert(x);
if(start==end)return 0;
if(!cnt.count(end))return -1;
queue<string>q;
q.push(start);
dist[start]=0;
st[start]=true;
while(q.size())
{
auto t=q.front();
q.pop();
for(int i=0;i<8;i++)
{
for(int j=0;j<4;j++)
{
if(t[i]!=word[j])
{
string next=t;
next[i]=word[j];
if(st[next]==false&&cnt.count(next))
{
dist[next]=dist[t]+1;
if(next==end)return dist[end];
q.push(next);
st[next]=true;
}
}
}
}
}
return -1;
}
};
Codeforces
A.Prof. Slim
#include <bits/stdc++.h>
using namespace std;
int _;
const int N=1e5+10;
int a[N];
int n;
void solve()
{
cin>>n;
int cnt=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]<0)
{
cnt++;
a[i]=-a[i];
}
}
for(int i=0;i<cnt;i++)a[i]=-a[i];
if(is_sorted(a,a+n))puts("YES");
else puts("NO");
}
int main()
{
cin>>_;
while(_--)solve();
return 0;
}
B - Dorms War
#include <bits/stdc++.h>
using namespace std;
int _;
int n;
void solve()
{
unordered_set<char>cnt;
string s;
int n;
cin>>n;
cin>>s;
int k;
cin>>k;
for(int i=0;i<k;i++)
{
char c;
cin>>c;
cnt.insert(c);
}
int c=0;
int res=0;
for(int i=0;i<n;i++)
{
if(cnt.count(s[i]))
{
res=max(res,c);
c=1;
}
else c++;
}
cout<<res<<endl;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>_;
while(_--)solve();
return 0;
}