给定一个仅包含大小写字母和空格 ' '
的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指由字母组成,但不包含任何空格的字符串。
示例:
输入: "Hello World"
输出: 5
上期的问题是:119,最大子序和
1public int maxSubArray(int A[]) {
2 int ans = A[0], i, j, sum = 0;
3 for (i = 0; i < A.length; i++) {
4 sum += A[i];
5 ans = sum > ans ? sum : ans;
6 sum = sum > 0 ? sum : 0;
7 }
8 return ans;
9}
解析:
他求的是连续子数组的最大和,sum是求子数组的和,但他并不是一直累加,当sum小于0的时候就让他归零,就相当于把它舍弃,因为一个负数加上任何一个数,都会比那个数小。如果大于0,就不要舍去,因为任何一个数加上一个正数都会比原来的数大。其实我们还可以换种写法
1public int maxSubArray2(int[] A) {
2 int n = A.length;
3 int[] dp = new int[n];
4 dp[0] = A[0];
5 int max = dp[0];
6 for (int i = 1; i < n; i++) {
7 dp[i] = A[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
8 max = Math.max(max, dp[i]);
9 }
10 return max;
11}
dp数组的每个元素表示的是当前最大的子数组和。我们也可以先不在for循环中求max的值,最后返回数组dp中的最大值也是可以的。