文章目录
- 1.替换所有的问号
- 1.1 题目
- 1.2 思路
- 1.3 代码
- 2. leetcode 495.提莫攻击
- 2.1 题目
- 2.2 思路
- 2.3 代码
- 3.leetcode 6. Z字形变换
- 3.1 题目
- 3.2 思路
- 3.3 代码
- 4. leetcode 38.外观数列
- 4.1 题目
- 4.2 思路
- 4.3 代码
- 5.leetcode 1419.数青蛙
- 5.1 题目
- 5.2 思路
- 5.3 代码
1.替换所有的问号
1.1 题目
题目链接
1.2 思路
模拟算法其实就是按题意解题。
1.3 代码
class Solution {
public:string modifyString(string s) {int n = s.size();for(int i = 0; i < n; i++){if(s[i] == '?'){for(char ch = 'a'; ch <= 'z'; ch++){if((i == 0 || ch != s[i - 1]) && (i == n - 1 || ch != s[i + 1])){s[i] = ch;break;}}}}return s;}
};
2. leetcode 495.提莫攻击
2.1 题目
题目链接
2.2 思路
2.3 代码
class Solution {
public:int findPoisonedDuration(vector<int>& s, int d) {int ret = 0, n = s.size();for(int i = 0; i < n - 1; i++){int a = s[i + 1] - s[i];if(a >= d) ret += d;else ret += a;}ret += d;return ret;}
};
3.leetcode 6. Z字形变换
3.1 题目
题目链接
3.2 思路
3.3 代码
class Solution {
public:string convert(string s, int nu) {// 处理边界情况if(nu == 1) return s;int n = s.size();string ret;// 计算公差int d = 2 * nu - 2;//处理第一行for(int i = 0; i < n; i += d){ret += s[i];}//处理第k行for(int k = 1; k < nu - 1; k++){for(int i = k, ii = d - k; i < n || ii < n; i += d, ii += d){if(i < n) ret += s[i];if(ii < n) ret += s[ii];}}//处理第n行for(int i = nu - 1; i < n; i += d){ret += s[i];}return ret;}
};
4. leetcode 38.外观数列
4.1 题目
外观数列
4.2 思路
4.3 代码
class Solution {
public:string countAndSay(int n) {string ret = "1";for(int i = 1; i < n; i++){string tmp;int len = ret.size();for(int left = 0, right = 0; right < len; ){while(ret[left] == ret[right] && right < len) right++;tmp += to_string(right - left) + ret[left];left = right;}ret = tmp;}return ret;}
};
5.leetcode 1419.数青蛙
5.1 题目
题目链接
5.2 思路
5.3 代码
class Solution {
public:int minNumberOfFrogs(string nums) {string s = "croak";int n = s.size();vector<int> hash(n);//数组模拟哈希表unordered_map<char, int> ha;//哈希表存每个字符 及其对应下标for(int i = 0; i < n; i++){ha[s[i]] = i;// 计算每个字符的下标}for(int i = 0; i < nums.size(); i++){if(nums[i] == 'c'){if(hash[n - 1] != 0) hash[n - 1]--;hash[ha[nums[i]]]++;}else{if(hash[ha[nums[i]] - 1] <= 0) return -1;hash[ha[nums[i]] - 1]--;hash[ha[nums[i]]]++;}}for(int i = 0; i < n - 1; i++){if(hash[i] != 0) return -1;}return hash[n - 1];}
};