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