leetcode-15-basic-string

58. Length of Last Word

解题思路:

从结尾向前搜索,空格之前的就是最后一个词了。写的时候我考虑了尾部有空格的情况。需要注意的是,测试用例中有" "的情况,此时应返回0。

int lengthOfLastWord(string s) {
        if (s.length() == 0 || s.length() == 1 && s[0] == ' ')
            return 0;
        if (s.length() == 1 && s[0] != ' ')
            return 1;
        int i;
        int count = 0;
        bool flag = false;
        for (i = s.length() - 1; i >= 0; i--) {
            if (s[i] == ' ') {
                if (flag == false)
                    continue;
                else 
                    break;
            }
            if (s[i] != ' ') {
                if (flag == false)
                    flag = true;
                count++;
            }
        }
        return count;
    }  

 338. Counting Bits

解题思路:

这道题想了好久。。思路是当前数i与i-1按位做与操作,这样可以找到最长相同前缀的地方,从那个位置之后,i-1的为0,i的为1且后面都是0,所以只要

取这个数的1的个数再加1就可以了。例如:

1011 0011 1

1011 0100 0

所以只要知道1011 0000 0处1的个数,再加1即可。用vector存好即可。

vector<int> countBits(int num) {
        vector<int> result(num+1, 0);
        if (num == 0)
            return result;
        for (int i = 1; i < num + 1; i++) {
            result[i] = result[i & (i - 1)] + 1;
        }
        return result;
    }

原文地址:https://www.cnblogs.com/pxy7896/p/6592662.html