• LeetCode刷题之字符串


    第一题:反转字符串

    示例:

    输入:["h","e","l","l","o"]
    输出:["o","l","l","e","h"]

    来源:点击这里

    答案:简单

    void reverseString(char* s, int sSize){
        int j=sSize-1;
        for (int i=0;i<sSize/2;){
            char temp = s[i];
                 s[i] = s[j];
                 s[j] = temp;
            i++;
            j--;
        }
    }

    第二题:字符串中的第一个唯一字符

    示例:

    s = "leetcode"
    返回 0.
    
    s = "loveleetcode",
    返回 2.

    来源:点击这里

    答案:跟出现次数有关的,不要犹豫,直接hash

    int firstUniqChar(char * s){
        int len = strlen(s);
        int i = 0;
        if(len == 0)
          return -1;
                  
        int table[26] = {0};
        for( i = 0; i < len;i++)
            table[s[i] - 'a']++;
        
        for(i = 0; i < len;i++){
            if(table[s[i] - 'a'] == 1)
                return i;
        }    
        return -1;  
    }

    第三题:有效的字母异位词

    示例:

    输入: s = "anagram", t = "nagaram"
    输出: true

    来源:点击这里

    答案:异位词的意思是字母出现次数是一样的,但是出现的顺序不一样

    这道题超级简单,我才用的是暴力求解的方法。先对字符串进行排序。所以采用的C++使用sort()函数。还可以采用hash.

    class Solution {
    public:
        bool isAnagram(string s, string t) {
            sort(s.begin(),s.end());
            sort(t.begin(),t.end());
            if (s.size() != t.size()) return false;
            for (int i=0;i<s.size();i++){
                if (s[i] != t[i]) return false;
            }
            return true;
        }
    };

    第四题:验证回文字符串

    示例:

    输入: "A man, a plan, a canal: Panama"
    输出: true

    来源:点击这里

    答案:这道题简单,采用暴力求解,使用C++函数toupper和isalnum来处理与判断字符串

    class Solution {
    public:
        bool isPalindrome(string s) {
            for ( int i = 0,j = s.size()-1;i<j;i++,j--){
                while (!isalnum(s[i])&&i<j) i++;
                while (!isalnum(s[j])&&i<j) j--;
                if(toupper(s[i]) != toupper(s[j])) return false;  
            }
            return true;
        }
    };

    第五题:整数反转

    示例:

    输入: 120
    输出: 21

    来源:点击这里

    答案:

    class Solution {
    public:
       int reverse(long int x) {
        int  res=0;     //res表示结果
    
        while(x!=0)          
        {
            if(res>INT_MAX / 10) return 0;
            if(res<INT_MIN / 10) return 0;        //判断是否将要发生越界
            res*=10;          
            res=res+x%10;   
            x=x/10;         
        }
        return res;
        }
    };

    第六题:字符串转换整数 (atoi)

    示例:详细示例需要看力扣官网

    输入: "42"
    输出: 42

    来源:点击这里

    答案:该题属于中等难度,独立解决比较困难,答案参考于力扣官网

    class Solution {
    public:
        int myAtoi(string str) {
            int i=0,sign=1,result=0;
            if(str==" ") return 0;
          
            for(i=0;i<str.length();++i){
                if(str[i]!=' ')
                    break;
            }
            
            if(str[i]=='-'){
                sign=-1;
                i++;
            }else if(str[i]=='+') i++;
           
            if(i==str.length()||str[i]<'0'||str[i]>'9')
                return 0;
    
            while(i<str.length()&&str[i]>='0'&&str[i]<='9'){
                if(result>INT_MAX/10||(result==INT_MAX/10&&(str[i]-'0')>INT_MAX%10)) return INT_MAX;
                if(result<INT_MIN/10||(result==INT_MIN/10&&(str[i]-'0')>-(INT_MIN%10))) return INT_MIN;           
                result=result*10+sign*(str[i]-'0');
                i++;
            }
        return result;
        }
    };
  • 相关阅读:
    Webpack 学习2
    Webpack 学习
    JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
    JS魔法堂:再识Number type
    基础野:细说浮点数
    基础野:细说有符号整数
    基础野:细说无符号整数
    基础野:细说原码、反码和补码
    Vim魔法堂:认识快捷键绑定
    Httpd运维日志:通过apxs添加模块
  • 原文地址:https://www.cnblogs.com/roscangjie/p/12362405.html
Copyright © 2020-2023  润新知