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;
    }
};

 

posted @ 2020-02-25 16:33  一颗蘋果  阅读(225)  评论(0编辑  收藏  举报