decode string

string serialization

word abbr

string decode

Reverse Words in a String II

  • the sky is blue -> blue is sky the
  • does not contain trailing or leading space
public class Solution {
    public void reverseWords(char[] s) {
        int start = 0;
        int end = 0;

        while(end < s.length){
            while(end < s.length && s[end] != ' ') end++;

            reverse(s, start, end - 1);

            end ++;
            start = end;
        }

        reverse(s, 0, s.length - 1);
    }

    private void reverse(char[] s, int start, int end){
        while(start < end){
            char temp = s[start];
            s[start] = s[end];
            s[end] = temp;

            start ++;
            end --;
        }
    }
}

Reverse Words in a String

  • may contain trailing or leading space
public class Solution {
    public String reverseWords(String s) {
        if(s.length() == 0) return "";
        int start = 0;
        int end = 0;

        char[] array = s.toCharArray();

        while(end < s.length()){
            while(end < s.length() && array[end] == ' ') end ++;
            start = end;
            while(end < s.length() && array[end] != ' ') end ++;
            reverse(array, start, end - 1);
        }

        StringBuilder sb = new StringBuilder();
        end = s.length() - 1;

        while(end >= 0){
            while(end >= 0 && array[end] == ' ') end --;
            while(end >= 0 && array[end] != ' '){
                sb.append(array[end--]);
            }
            sb.append(' ');
        }

        return sb.toString().trim();
    }

    private void reverse(char[] s, int start, int end){
        while(start < end){
            char temp = s[start];
            s[start] = s[end];
            s[end] = temp;

            start ++;
            end --;
        }
    }
}

rotated array

  • 1,2,3,4,5,6,7 -> 5,6,7,1,2,3,4
public class Solution {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;

        reverse(nums, 0, nums.length - k - 1);
        reverse(nums, nums.length - k, nums.length - 1);
        reverse(nums, 0 , nums.length - 1);
    }

    private void reverse(int[] nums, int start, int end){
        while(start < end){
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;

            start ++;
            end --;
        }
    }
}

valid palindrome:

  • can not use: while(start < end && s.charAt(start) == s.charAt(end)) because, space may exist in the middle which in this problem can be deemed as valid.
public class Solution {
    public boolean isPalindrome(String s) {
        if(s.length() <= 1) return true;
        s = s.toLowerCase();

        int start = 0;
        int end = s.length() - 1;

        while(start < end){
            while(start < end && !Character.isLetterOrDigit(s.charAt(start)))
                start ++;
            while(start < end && !Character.isLetterOrDigit(s.charAt(end)))
                end --;

            if (s.charAt(start) != s.charAt(end)) return false;
            start++;
            end--;
        }

        return true;
    }
}
  • naive
int start = 0;
int end = s.length() - 1;

while (start < end) {
    if (s.charAt(start) != s.charAt(end)) return false;
    start++;
    end--;
}

return true;

results matching ""

    No results matching ""