LeetCode 5713. 字符串中不同整数的数目
原题链接
思路:
双指针算法,用到unordered_set
class Solution {
public:
int numDifferentIntegers(string word) {
unordered_set<string> nums;
for(int i = 0; i < word.size(); i ++ )
{
if(! isdigit(word[i])) continue;
string s;
int j = i;
while(j < word.size() && isdigit(word[j])) s += word[j ++];
// 去掉前导0
int k = 0;
while(k + 1 < word.size() && s[k] == '0') k ++;
nums.insert(s.substr(k));
i = j;
}
return nums.size();
}
};
LeetCode 5715. 还原排列的最少操作步数
原题链接
思路:
发现规律,暴力
class Solution {
public:
void work(vector<int>& q){
vector<int> w;
for(int i = 0; i < q.size(); i += 2) w.push_back(q[i]);
for(int i = 1; i < q.size(); i += 2) w.push_back(q[i]);
q = w;
}
bool check(vector<int>& q){
for(int i = 0; i < q.size(); i ++ )
if(q[i] != i) return false;
return true;
}
int reinitializePermutation(int n) {
vector<int> q;
for(int i = 0; i < n; i ++ ) q.push_back(i);
int cnt = 0;
while(true){
cnt ++;
work(q);
if(check(q)) break;
}
return cnt;
}
};
LeetCode 5714. 替换字符串中的括号内容
原题链接
思路:
双指针算法,unordered_map
class Solution {
public:
string evaluate(string s, vector<vector<string>>& knowledge) {
unordered_map<string, string> hash;
for(auto& e : knowledge) hash[e[0]] = e[1];
string res;
for(int i = 0; i < s.size(); i ++ ){
if(s[i] != '(') res += s[i];
else{
string key;
int j = i + 1;
while(j < s.size() && s[j] != ')') key += s[j ++];
i = j;
if(hash.count(key)) res += hash[key];
else res += '?';
}
}
return res;
}
};