题解 | 打牌
打牌
https://www.nowcoder.com/practice/82442ee76977479e8ab4b88dfadfca9f
#include <iostream>
using namespace std;
#include <bits/stdc++.h>
bool isSame(string s) { //判断对子
for (int i = 0; i < s.size(); i++) {
if (s[i] != s[0]) {
return false;
}
}
return true;
}
bool isSeq(string s) { //判断是不是顺子
for (int i = 1; i < s.size(); i++) {
if (s[i] != s[i - 1] + 1) {
return false;
}
}
return true;
}
int main() {
string a, b;
while (cin >> a >> b) {
int n = b.size();
int num1 = stoi(b);
bool isOk = false;
if (n <= 4) {
for (int i = 0; i < a.size(); i++) {
string p = a.substr(i, n);
if (!isSame(p)) {
continue;
}
int num2 = stoi(p);
if (num2 > num1) {
isOk = true;
break;
}
}
} else {
set<char> myset;
for (int i = 0; i < a.size(); i++) {
myset.insert(a[i]);
}
string ss = "";
for (auto it : myset) {
ss += it; //对输入的字符串进行去重
}
for (int i = 0; i < ss.size(); i++) {
string p = ss.substr(i, n);
if(!isSeq(p)){
continue; //如果截取的子串不是顺子,则下一个
}
int num2 = stoi(p);
if (num2 > num1) {
isOk = true;
break;
}
}
}
if (isOk) {
printf("YES\n");
} else {
printf("NO\n");
}
return 0;
}
}
