您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

leetcode字符串题目c++

38. 外观数列

class Solution {
public:
    string countAndSay(int n) {
        string s = "1";
        for(int i = 0; i < n - 1; i++) { //string s = "1"为第一项,所以是n-1
            string ans;
            for(int j = 0; j < s.size(); j++) {
                int k = j;
                while(k < s.size() && s[k] == s[j]) k++;
                ans = ans + to_string(k - j) + s[j];
                j = k - 1;  //因为循环完之后,会j++,所以这里是k-1
            }
            s = ans;
        }

        return s;
    }
};

49. 字母异位词分组

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> hash;
        for(auto s: strs) {
            string cur = s;
            sort(cur.begin(), cur.end());
            hash[cur].push_back(s);
        }

        vector<vector<string>> ans;
        for(auto a : hash) {
            ans.push_back(a.second);
        }
        return ans;
    }
};

151. 翻转字符串里的单词

class Solution {
public:
    string reverseWords(string s) {
        int k = 0;
        reverse(s.begin(), s.end());
        for(int i = 0; i < s.size(); i++) {
            while(i < s.size() && s[i] == ' ') i++;
            if(i == s.size()) break;
            int j = i;
            while(j < s.size() && s[j] != ' ') j++;
            reverse(s.begin() + i, s.begin() + j);
            if(k) s[k++] = ' ';
            while(i < j) s[k++] = s[i++];
        }
        s.erase(s.begin() + k, s.end());
        return s;
    }
};

165. 比较版本号

class Solution {
public:
    int compareVersion(string version1, string version2) {
        for(int i1 = 0, i2 = 0; i1 < version1.size() || i2 < version2.size();) {
            int j1 = i1;
            while(j1 < version1.size() && version1[j1] != '.')j1++;
            int j2 = i2;
            while(j2 < version2.size() && version2[j2] != '.')j2++;
            int s1 = i1 == j1 ? 0 : atoi(version1.substr(i1, j1 - i1).c_str());
            int s2 = i2 == j2 ? 0 : atoi(version2.substr(i2, j2 - i2).c_str());
            if(s1 < s2) return -1;
            if(s1 > s2) return 1;
            i1 = j1 + 1;
            i2 = j2 + 1;
        }
        return 0;
    }
};

929. 独特的电子邮件地址

class Solution {
public:
    int numUniqueEmails(vector<string>& emails) {
        unordered_set<string> hash;
        for(auto s : emails) {
            int at = s.find('@');
            string name;
            for(auto c : s.substr(0, at)) {
                if(c == '+') break;
                if(c != '.') name += c;
            }
            string domain = s.substr(at + 1);
            hash.insert(name + '@' + domain);
        }
        return hash.size();
    }
};

5. 最长回文子串

class Solution {
public:
    string longestPalindrome(string s) {
        string ans;
        for(int i = 0; i < s.size(); i++) {
            for(int j = i, k = i; j >= 0 && k < s.size() && s[j] == s[k]; j--, k++) {
                if(k - j + 1 > ans.size()) ans = s.substr(j, k - j + 1);
            }
            for(int j = i, k = i + 1; j >= 0 && k < s.size() && s[j] == s[k]; j--, k++) {
                if(k - j + 1 > ans.size()) ans = s.substr(j, k - j + 1); 
            }
        }
        return ans;
    }
};

6. Z 字形变换

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1) return s;
        string ans;
        for(int i = 0; i < numRows; i++) {
            if(i == 0 || i == numRows - 1) {
                for(int j = i; j < s.size(); j += 2 * numRows - 2) ans += s[j];
            } else {
                for(int j = i, k = 2 * numRows - 2 - i; j < s.size() || k < s.size(); j += 2 * numRows - 2, k += 2 * numRows - 2) {
                    if(j < s.size()) ans += s[j];
                    if(k < s.size()) ans += s[k];
                }
            }
        }
        return ans;
    }
};

3. 无重复字符的最长子串

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int ans = 0;
        unordered_map<char, int> hash;
        for(int i = 0, j = 0; i < s.size(); i++) {
            hash[s[i]]++;
            while(hash[s[i]] > 1)hash[s[j++]]--;
            ans = max(ans, i - j + 1);//从j开始到i
        }
        return ans;
    }
};//本题使用双指针,当i往后移动时,j也一定是不动或者往右移动的

208. 实现 Trie (前缀树)

在这里插入代码片

273. 整数转换英文表示

在这里插入代码片

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进