Monday, September 16, 2013

Length of Last Word

Q:

Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string.
If the last word does not exist, return 0.
Note: A word is defined as a character sequence consists of non-space characters only.
For example,
Given s = "Hello World",
return 5.



A:
 先用 j 指向第一个字母(从后向前) , 再用i指向第一个非字母(也是从后向前)

public class Solution {
    public int lengthOfLastWord(String s) {
        if(s == null || s.length() == 0){return 0;};
        int i,j; // i is the start point, while j is the end point of a word
        j = s.length()-1;
        while(j>=0){
            if(s.charAt(j) ==' '){
                j--;
            }else{
                break;
            }
        }
        //run from j
        i = j;
        while(i>=0){
            char ch = s.charAt(i);
            boolean isUpper = ( ch>='A' && ch<='Z');
            boolean isLower = ( ch>='a' && ch<='z');
            if( isUpper || isLower  ){
                i--;
            }else{
                break;
            }
        }
        return j-i;
    }
}

Mistakes:

对于要考虑边界的,一个好 习惯就是先把 最最边界的情况列出来,单独处理。 例如,这道题目。 因为要用到index,那么s.length() == 0的时候,显然不能有index, 所以,我们单独处理这个。所以加了句

----------------第二遍----------------------- 思路同上------------
public class Solution {
    public int lengthOfLastWord(String s) {
        s= s.toLowerCase();
        int end = s.length()-1;
        // point end to the first alphabet
        while(end>=0 && !( s.charAt(end) >='a' && s.charAt(end) <='z')){
            end--;
        }
        int begin = end;
        while(begin>=0&& s.charAt(begin) >='a' && s.charAt(begin) <='z' ){
            begin--;
        }
        return end-begin;
    }
}

-----------------------------3 rd Pass -----------------------

public class Solution {
    public int lengthOfLastWord(String s) {
        s = s.trim();
        int i= s.lastIndexOf(" ");
        return i<0?s.length(): s.length()-1-i;
    }
}




No comments:

Post a Comment