Power of Four and Reverse Vowels of a String

Written by deft | Published 2022/09/09
Tech Story Tags: leetcode | leetcode-practice | leetcode-patterns | java | software-development | software-engineering | interview | programming

TLDRGiven an integer `n` is a power of four, if there exists an integer such that `x` such that`n == 4x` The easiest way how to solve this problem is to divide N on 4 and that is it. We will iterate again and again till our number is bigger than 1. Author: Sergei Golitsynlink: <https://leetcode.com/problems/power-of-four/Given an integer `n` return `true` if it is a power of four. Otherwise, return`false`via the TL;DR App

  • Given an integer n, return true if it is a power of four. Otherwise, return false.

  • An integer n is a power of four, if there exists an integer x such that n == 4x.

Example 1:

Input: n = 16
Output: true

Example 2:

Input: n = 5
Output: false

Example 3:

Input: n = 1
Output: true

Solution:

The easiest way how to solve this problem is to divide N on 4 and that is it. We will iterate again and again till our number is bigger than 1.

public boolean isPowerOfFour(int n) {
    if (n == 0){
        return false;
    }
    
    while(n != 1){
        if (n % 4 != 0){
            return false;
        }
        n /= 4;
    }
    return true;
}

But also we can use recursion:

    public boolean isPowerOfFour(int n) {
        return check(n, 1);
    }

    boolean check(int n, long value) {
        if (value >= n) return n == value;

        return check(n, value * 4);
    }

And sure, we can solve it with math, but I don’t want to share it with you. Because for me, you usually cannot find a mathematical solution without solving this problem before.

Does it clear? Write your comments.

ok ok and out next problem for today

Reverse Vowels of a String

  • Given a string s, reverse only all the vowels in the string and return it.
  • The vowels are 'a''e''i''o', and 'u', and they can appear in both cases.

Example 1:

Input: s = "hello"
Output: "holle"

Example 2:

Input: s = "leetcode"
Output: "leotcede"

Solution:

To solve this problem, we will use the popular technique of two-pointers.

The main idea of solving problems like this -- is to understand base techniques and use them later in medium and hard problems.

We are going to prepare a vowel dictionary. Then we can iterate in both directions. If both pointers stay on the vowels we can swap them. And continue our direction.

public String reverseVowels(String s) {
    Set<Character> dict = new HashSet<>();
    dict.add('a');
    dict.add('A');
    dict.add('e');
    dict.add('E');
    dict.add('i');
    dict.add('I');
    dict.add('o');
    dict.add('O');
    dict.add('u');
    dict.add('U');

    int reader = 0;
    int writer = s.length() - 1;

    StringBuilder sb = new StringBuilder(s);
    while (reader < writer) {
        if(!dict.contains(s.charAt(reader))){
            reader ++;
        }
        if (!dict.contains(s.charAt(writer))){
            writer--;
        }
        if (dict.contains(s.charAt(reader)) && dict.contains(s.charAt(writer))){
            char tmp = s.charAt(reader);
            sb.setCharAt(reader++, s.charAt(writer));
            sb.setCharAt(writer--, tmp);
        }
    }
    return sb.toString();
}

Does it clear? Write your comments.


Written by deft | Senior Software Engineer with 7+ YoE building massively scalable systems both from scratch and diving into a codebase
Published by HackerNoon on 2022/09/09