LeetCode 解题笔记字符串

Posted 火山上的企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 解题笔记字符串相关的知识,希望对你有一定的参考价值。

文章目录


总目录:      LeetCode 解题笔记(一)总


一、基础篇

344. 反转字符串(2022/03/06)

标签:字符串

题目:

● 我的答案:

这应该是做过的最简单的一道题目

class Solution 
public:
    void reverseString(vector<char>& s) 
        char tmp;
        int n = s.size() - 1;
        for(int i=0; i<n; i++,n--) 
            tmp = s[n];
            s[n] = s[i];
            s[i] = tmp;
        
    
;

● 官方答案:使用 swap 函数:

class Solution 
public:
    void reverseString(vector<char>& s) 
        int n = s.size();
        for (int left = 0, right = n - 1; left < right; ++left, --right) 
            swap(s[left], s[right]);
        
    
;

7. 整数反转(2022/03/07)

链接: 7. 整数反转

题目:

标签: 字符串,数学

● 我的答案:

class Solution 
public:
    int reverse(int x) 
        int ret = 0;
        while(x) 
        	//以下次判断条件为,看答案后可知
            if (ret < INT_MIN / 10 || ret > INT_MAX / 10) 
                return 0;
            
            ret = ret*10 + x%10;
            x = x/10; 
        
        return ret;
    
;

INT_MIN 在标准头文件 limits.h 中定义:

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)

387. 字符串中的第一个唯一字符(2022/03/08)

● 题目:

● 标签: 队列、哈希表、字符串

● 我的解法:

暴力解法,都失败了… 哈希方法:

class Solution 
public:
    int firstUniqChar(string s) 
        //哈希第一次记录频率, 26个字母而已
        int n = s.size();
        unordered_map<int,int> _map;    //无序的,有键值的用 unordered_map
        for(int i=0; i<n; i++) 
            _map[s[i]] ++;
        
        /*
		for (char ch: s)     //可以直接常引用了
          ++_map[ch];
    	
		*/

        //第二次取最近的字符
        for(int i=0; i<n; i++) 
            if(_map[s[i]] == 1) return i; 
        

        return -1;
    
;

242. 有效的字母异位词(2022/03/09)

● 链接:242. 有效的字母异位词

**● 标签:**字符串、哈希表、数组

● 题目:

● 我的答案:
哈希计数,然后对比,相减

class Solution 
public:
    bool isAnagram(string s, string t) 
        unordered_map<int,int> _map;
        for(auto const & num: s) 
            ++_map[num];
        

        for(auto const & num: t) 
            if(_map.count(num)) 
                --_map[num];
                if(_map[num] == 0) 
                    _map.erase(num);
                
            
            else 
                return false;
            
        

        if(_map.size()!=0)  return false;
        else                return true;
    
;

● 官方答案1: 判断长度,快速排序判断内容

class Solution 
public:
    bool isAnagram(string s, string t) 
        if (s.length() != t.length()) 
            return false;
        
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s == t;
    
;

● 官方答案2: 哈希表 + 数组,与我答案思路类似!

class Solution 
public:
    bool isAnagram(string s, string t) 
        if (s.length() != t.length()) 
            return false;
        
        vector<int> table(26, 0);
        for (auto& ch: s) 
            table[ch - 'a']++;
        
        for (auto& ch: t) 
            table[ch - 'a']--;
            if (table[ch - 'a'] < 0) 
                return false;
            
        
        return true;
    
;

以上是关于LeetCode 解题笔记字符串的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 解题笔记字符串

LeetCode 解题笔记字符串

LeetCode算法题-Find the Difference(Java实现-五种解法)

LeetCode952三部曲之一:解题思路和初级解法(137ms,超39%)

LeetCode952三部曲之一:解题思路和初级解法(137ms,超39%)

LeetCode114 二叉树展开为链表 ---二叉树题 三种解法 (递归) (迭代) (前驱节点)