题目描述-一
对于正整数x,如果其每一位上的数字只在x中出现了一次,则称x是唯一数。如1,532,323,129都是唯一数,而444,233,100不是唯一数。问题:[1,n]中有多少个唯一数。函数传入一个正整数n,返回[1,n]中唯一数的个数。
e.g:
输入:13
输出:12
说明:除了11之外的数字都是唯一数,因此答案为12
输入:100
输出:90
备注:1<=n<=10^6
参考代码-一
bool test_one(int n) {
set<int>nums;
int c = 0;
while (n != 0) {
int temp = n % 10;
n /= 10;
c++;
nums.insert(temp);
}
return c == nums.size();
}
int main() {
int n;
cin >> n;
int res = 0;
for (int i = 1; i <= n; i++) {
if (test_one(i)) {
res++;
}
}
cout << res;
return 0;
}
题目描述-二
输入一串字符串,输出字符串中长度最长的连续字母,如果有多个,就输出多个,以分号隔开,重复的不需要过滤。
e.g:
输入:aadsfsdfddddsfsd
输出:d
输入:abcdefg
输出:a;b;c;d;e;f;g
输入:aaaadsfsdfddddsfaaaad
输出:a;d;a
参考代码-二
class Solution{
public:
int maxLen = 1;
string ch;
string myfun(string strTmp){
string ret;
for(int i=0; i<strTmp.size(); i++){
if(i == strTmp.size()-1){
ret += strTmp[i];
}
ret = ret + strTmp + ";";
}
return ret;
}
string test(string buf){
int left = 0;
int right = 0;
int count = 0;
while(right<buf.size()){
if(buf[right] == buf[left]){
count++;
}
else{
count = 1;
left = right;
}
if(count == maxLen){
ch += buf[left];
}
else if(count>maxLen){
ch.clear();
maxLen = count;
ch += buf[left];
}
right++;
}
string ret = myfun(ch);
return ret;
}
}