leetcode 初级算法 字符串

字符串

    • 反转字符串
    • 整数反转
    • 字符串中的第一个唯一字符
    • 有效的字母异位词
    • 验证回文字符串
    • 字符串转换整数(atoi)
    • 最长公共前缀

反转字符串

题目:把vector char反转

AC代码:

class Solution {
public:
    void reverseString(vector& s) {
        char temp;
        int len = s.size();
        int bound = len/2;
        for(int i = 0;i

整数反转

题目:将给定的32位整数取反(321变为123),如果overflow,返回0。

AC代码:

class Solution {
public:
    int reverse(int x) {
        long temp = x;
        int sig = temp>0?1:-1;   //符号
        int min = 0x80000000,max = 0x7FFFFFFF;
        vector v;
        temp /= sig;   //abs
        while(temp!=0)
        {
            int cur=temp%10;
            temp/=10;
            v.push_back(cur);
        }
        long value = 0;
        for(int i = 0;imax)
            return 0;
        else
            return value;
    }
};

字符串中的第一个唯一字符

错误代码:
//错误原因:生成的uniq并不是唯一的字符集合,而是所有字符。

class Solution {
public:
    int firstUniqChar(string s) {
        //找到所有没重复出现的字符,无则返回-1,然后再从左到右扫描,第一次出现set中有的字符,返回下标。
        set uniq;
        int len = s.size();
        string temp(s);
        sort(temp.begin(),temp.end());
        for(int i = 0;i

正确代码:

  class Solution {
    public:
        int firstUniqChar(string s) {
            //找到所有没重复出现的字符,无则返回-1,然后再从左到右扫描,第一次出现set中有的字符,返回下标。
            set uniq;
            int len = s.size();
            string temp(s);
            sort(temp.begin(),temp.end());
            for(int i = 0;i

有效的字母异位词

AC代码:

class Solution {
public:
    bool isAnagram(string s, string t) {
        int len1 = s.size(),len2 = t.size();
        if(len1!=len2) return false;
        sort(s.begin(),s.end());
        sort(t.begin(),t.end());
        for(int i = 0;i

验证回文字符串

运行超时了
错误代码:

class Solution {
public:
    //忽略大小写(所以最开始全部转换为大写),只考虑数字和字母
    bool isPalindrome(string s) {
        int p2 = s.size()-1;
        int p1 = 0;
        if(p2==-1) return true;     //空字符串也符合
        upper(s);
        //move函数将前后指针移到下一个数字或者字母
        moveF(s,p1);
        moveB(s,p2);
        while(p1='a'&&s[i]<='z')
                s[i] += ('A'-'a');
        }
    }
    void moveF(string& s,int& p)
    {
        int len = s.size();
        while(p='A'&&s[p]<='Z')
                return;
            if((s[p]>='0'&&s[p]<='9'))
               return;
               p++;
        }
              //返回可能是找到了,也可能因为到头了
    }
    void moveB(string& s,int& p)
    {
        while(p>=0)    //可以向前移动,且有必要
        {if(s[p]>='A'&&s[p]<='Z')
                return;
            if((s[p]>='0'&&s[p]<='9'))
               return;
               p--;
        }
    }
};

字符串转换整数(atoi)

写的逻辑很麻烦,回头再看能否改善。
AC代码:

    class Solution {
    public:
        int myAtoi(string str) {
            int max = 0x7fffffff,min=0x80000000;
            int i = 0;
            long val = 0,sig=1,start=0;
            int len = str.length();
            if(len==0) return 0;   //字符串空
            while(i='0'&&str[i]<='9') ))
                return 0;
            if(str[i]=='-')
                sig = -1;
            if(str[i]=='+'||str[i]=='-')
                i++;
            bool flag = false;
            while(i='0'&&str[i]<='9')
            {
                if(str[i]!='0') flag=true;
                if(flag) start++;
                if(start>=11)
                {
                    if(sig==1)
                        return max;
                    else
                        return min;
                }
                val = val*10+(str[i]-'0');
                i++;
            }
            val *= sig;
            if(val>max)
                val=max;
            else if(val

最长公共前缀

AC代码:

class Solution {
public:
    string longestCommonPrefix(vector& strs) {
        //找到最短的字符串,以它为基准
        int minLen = 10000;
        string base;
        for(int i = 0;i

你可能感兴趣的:(leetcode算法题目)