186 293

186. Reverse Words in a String II

先反转整个字符串,再反转每个单词(调整顺序也可以)

反转单词的时候:当 j 指到最后一个字符的时候,或者 j 的下一个指向空格,则反转该单词。

class Solution {
    public void reverseWords(char[] s) {
        if(s == null || s.length == 0){
            return;
        }   
        reverse(s, 0, s.length - 1);
        int i = 0, j = 0;
        while(j < s.length){
            if(j == s.length - 1 || s[j + 1] == ' '){
                reverse(s, i, j);
                i = j + 2;
            }
            j++;
        }
    }
    
    void reverse(char[] str, int i, int j){
        while(i < j){
            char c = str[i];
            str[i++] = str[j];
            str[j--] = c;
        }
    }
}

293. Flip Game

把两个连续的++变为--,遍历所有情况即可。当 i  和  i - 1都为 +时,添加 -。

class Solution {
    public List<String> generatePossibleNextMoves(String s) {
        List<String> list = new ArrayList<String>();
        for(int i = 1; i < s.length(); i++){
            if(s.charAt(i - 1) == '+' && s.charAt(i) == '+'){
                list.add(s.substring(0, i - 1) + "--" + s.substring(i + 1, s.length()));
            }
        }
        return list;
    }
}

 

上一篇:HTML 5 History API的”前生今世”


下一篇:起步socket编程 C#