1.leetcode1768题目
链接:1768. 交替合并字符串 - 力扣(LeetCode)
代码:
class Solution {
public:string mergeAlternately(string word1, string word2) {string word3;int a = word1.size(), b = word2.size();int i = 0, j = 0;while(i<a || j<b){if(i<a){word3+=word1[i];i++;}if(j<b){word3+=word2[j];j++;}}return word3;}
};
经验:
-
原代码中直接使用
word3[k] = word1[i]
和word3[k] = word2[j]
,这种方式在word3
未初始化大小时会导致未定义行为。应该使用word3+=word1[i].
2.力扣1071题
链接:1071. 字符串的最大公因子 - 力扣(LeetCode)
class Solution {
public:string gcdOfStrings(string str1, string str2) {int a=str1.size(),b=str2.size();int gcd_len=gcd(a,b);string gcd_string=str1.substr(0,gcd_len);if(check(str1,gcd_string) && check(str2,gcd_string)){return gcd_string;}else{return "";}}
private:bool check(string &a,string &b){int len_a=a.size(),len_b=b.size();int time=len_a/len_b;string repeated_str=b;for(int i=1;i<time;i++){repeated_str+=b;}return repeated_str==a;}
};
学习到:
- string可以直接通过+=进行拼接。
- gcd函数的使用
- substr函数:str.substr(start,length)
3.力扣1431题目
1431. 拥有最多糖果的孩子 - 力扣(LeetCode)
class Solution {
public:vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {int max = *max_element(candies.begin(),candies.end());vector<bool> index;for(int i=0;i<candies.size();i++){if(candies[i]+extraCandies>=max){index.push_back(true);}else{index.push_back(false);}}return index;}
};
学习:
- 新建vector:直接vector <type> name;
- push_back()在vector的末尾添加元素
- 求解最大值:int max = *max_element(candies.begin(),candies.end());(加*是解迭代器)
4.力扣345题
class Solution {
public:string reverseVowels(string s) {int i = 0, j = s.size() - 1; // 双指针unordered_set<char> vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};while (i < j) {// 移动左指针,直到找到元音while (i < j && vowels.find(s[i]) == vowels.end()) {i++;}// 移动右指针,直到找到元音while (i < j && vowels.find(s[j]) == vowels.end()) {j--;}// 交换两个元音字符if (i < j) {swap(s[i], s[j]);i++;j--;}}return s;}
};