随笔分类 - leetcode-字符串
摘要:题目: 解答: 1 class Solution { 2 public: 3 int countSubstrings(string s) 4 { 5 // 中心扩展法 6 int ans = 0; 7 for (int center = 0; center < 2 * s.length() - 1;
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 int minDistance(string word1, string word2) 4 { 5 int N1 = word1.size(); 6 int N2 = word2.size(); 7 8 vector<ve
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 vector<int> digits(int n) 4 { 5 vector<int> res; 6 while (n > 0) 7 { 8 res.push_back(n % 10); 9 n /= 10; 10 } 1
阅读全文
摘要:题目: 解答: 思路: 注意到数组元素均大于1,所以每次做除法之后都会使被除数变小。因此为了使最终结果最大,可将第一个元素作为被除数,之后所有元素做完除法之后的结果为除数。这样可以让被除数尽可能的大,除数尽可能的小。 1 class Solution { 2 public: 3 string opt
阅读全文
摘要:题目: 解答: 思路: 1,时间转化为分钟数; 2,然后对数字进行排序,进行比较; 3,注意头部和尾部时间的比较时需要考虑不同的方向; 1 class Solution { 2 public: 3 const int DAY_MINUTE = 24 * 60; 4 int time2int(cons
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string complexNumberMultiply(string a, string b) 4 { 5 int a1 = stoi(a); 6 int b1 = stoi(b); 7 8 int i = 0; 9 i
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string validIPAddress(string IP) 4 { 5 if (isValidIPv4(IP)) 6 { 7 return "IPv4"; 8 } 9 if (isValidIPv6(IP)) 10
阅读全文
摘要:题目: 解答: 方法一:分割+解析,两次遍历,线性空间。 第一个想法是将两个字符串按点字符分割成块,然后逐个比较这些块。 如果两个版本号的块数相同,则可以有效工作。如果不同,则需要在较短字符串末尾补充相应的 .0 块数使得块数相同。 算法: (1)根据点分割两个字符串将分割的结果存储到数组中。(2)
阅读全文
摘要:题目: 解答: DFS深度搜索思路,数值>255非法,以零开头长度大于等于2非法;不同于常规回溯思路,同层只用最多遍历3个数字,依次查看是否满足数值要求;各段的数值状态也是分段存储的,互不干涉,使用vector<string> path来存储; 1 private: 2 vector<string>
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string reverseWords(string s) 4 { 5 if (s.empty()) 6 { 7 return s; 8 } 9 10 int len = 0; 11 string ans = ""; 12
阅读全文
摘要:题目: 解答: 因为要找组成一样的单词,如何判断?最简单的,一排序,如果是同一个单词,那么就是组成一样的。比如 “eat” "tea" 排序后都为 “aet”。只要引入一个hash表,索引是排序后的单词,值为结果vector的下标,循环一遍就好了。 1 class Solution { 2 publ
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string multiply(string num1, string num2) 4 { 5 int m = num1.size(); 6 int n = num2.size(); 7 8 // 结果最多为 m + n
阅读全文
摘要:题目: 解答: 1 vector<string> generateParenthesis(int n) { 2 vector<vector<string>> v(n+1); 3 v[0].push_back(""); 4 for(int i = 1; i <= n; i++){ 5 for(int
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 // 1. 用map记录每个数字按键对应的所有字母 4 map<char, string> M = { 5 {'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {
阅读全文
摘要:题目: 解答: 32位 最大值和最小值分别是 2147483647, -2147483648。 如果 res = 214748364,r > 7, 那么接下来的那一步操作,res = res * 10 + r = 2147483648 > INT_MAX, 直接溢出报错。不过,我不理解的地方是,为什
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string convert(string s, int numRows) 4 { 5 if (numRows == 1) 6 { 7 return s; 8 } 9 10 // 防止s的长度小于行数 11 vector<
阅读全文
摘要:题目: 解答: 思路为三次反转。 1 class Solution { 2 public: 3 int reverse_string(string& s, int start, int end) 4 { 5 for (int i = start; i <= (start + end) / 2; i+
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string reverseWords(string s) 4 { 5 if(s.empty()) 6 { 7 return s; 8 } 9 10 int len = 0; 11 string ans = ""; 12
阅读全文
摘要:题目: 解答: 解题思路: (1)长度相同; (2)如果s2是s1的旋转串,可以得出s2肯定是s1+s1的子串; 1 class Solution { 2 public: 3 bool isFlipedString(string s1, string s2) 4 { 5 return s1.size
阅读全文
摘要:题目: 解答: 1 class Solution { 2 public: 3 string compressString(string S) 4 { 5 if (S.size() == 0) 6 { 7 return S; // 空串处理 8 } 9 10 string ans = ""; 11 i
阅读全文

浙公网安备 33010602011771号