<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: tommy-3</title>
    <description>The latest articles on Forem by tommy-3 (@tommy3).</description>
    <link>https://forem.com/tommy3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F88334%2F06a590c7-7b5e-4d68-a9ea-43ef89504ba7.jpeg</url>
      <title>Forem: tommy-3</title>
      <link>https://forem.com/tommy3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tommy3"/>
    <language>en</language>
    <item>
      <title>Learning Algorithms with JS, Python and Java #11: Count the Vowels</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Mon, 07 Jan 2019 22:27:42 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-11-count-the-vowels-91m</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-11-count-the-vowels-91m</guid>
      <description>&lt;p&gt;This series of articles follows Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages.&lt;/p&gt;

&lt;p&gt;Today's question is a simple introduction to regular expressions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Write a function that returns the number of vowels&lt;br&gt;
used in a string.  Vowels are the characters 'a', 'e'&lt;br&gt;
'i', 'o', and 'u'.&lt;br&gt;
--- Examples&lt;br&gt;
  vowels('Hi There!') --&amp;gt; 3&lt;br&gt;
  vowels('Why do you ask?') --&amp;gt; 4&lt;br&gt;
  vowels('Why?') --&amp;gt; 0&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  1: Iterative Solution
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function vowels(str) {
  let count = 0;
  let checker = ['a', 'e', 'i', 'o', 'u'];
  for (char of str.toLowerCase()) {
    if (checker.includes(char)) {
      count++;
    }
  }
  return count;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vowels(string):
    count = 0
    checker = ['a', 'e', 'i', 'o', 'u']
    for char in string.lower():
        if char in checker:
            count += 1
    return count

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.Arrays;
import java.util.List;

static int vowels(String str) {
    int count = 0;
    List&amp;lt;Character&amp;gt; checker = Arrays.asList('a', 'e', 'i', 'o', 'u');
    for (char chr : str.toLowerCase().toCharArray()) {
        if (checker.contains(chr)) {
            count++;
        }
    }
    return count;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  2: Using Regular Expression
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function vowels(str) {
  const matches = str.match(/[aeiou]/gi); // an array or null
  return matches ? matches.length : 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import re

def vowels(string):
    matches = re.findall('[aeiou]', string, re.IGNORECASE)  # a list
    return len(matches)

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.regex.Matcher;
import java.util.regex.Pattern;

static int vowels(String str) {
    Pattern pattern = Pattern.compile("[aeiou]", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    int count = 0;
    while (matcher.find()) {
        count++;
    }
    return count;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java 9+:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.regex.Pattern;

static long vowels(String str) {
    return Pattern.compile("[aeiou]", Pattern.CASE_INSENSITIVE)
            .matcher(str)
            .results()
            .count();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>algorithms</category>
      <category>javascript</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java #10: Pyramid</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Sat, 29 Dec 2018 04:18:50 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-10-pyramid-4mga</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-10-pyramid-4mga</guid>
      <description>&lt;p&gt;This series of articles follows Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages. &lt;/p&gt;

&lt;p&gt;Today's question is a slight variation on &lt;a href="https://dev.to/tommy3/learning-algorithms-with-js-python-and-java-9-printing-steps-2i05"&gt;the last one&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Write a function that accepts a positive number N.&lt;br&gt;
The function should console log a pyramid shape&lt;br&gt;
with N levels using the # character.  Make sure the&lt;br&gt;
pyramid has spaces on both the left &lt;em&gt;and&lt;/em&gt; right hand sides&lt;br&gt;
--- Examples&lt;br&gt;
  pyramid(1)&lt;br&gt;
      '#'&lt;br&gt;
  pyramid(2)&lt;br&gt;
      ' # '&lt;br&gt;
      '###'&lt;br&gt;
  pyramid(3)&lt;br&gt;
      '  #  '&lt;br&gt;
      ' ### '&lt;br&gt;
      '#####'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  1: Iterative Solution
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function pyramid(n) {
    const columnCount = 2 * n - 1;
    const midColumn = Math.floor(columnCount / 2);

    for (let row = 0; row &amp;lt; n; row++) {
        let level = '';

        for (let column = 0; column &amp;lt; columnCount; column++) {
            if (Math.abs(column - midColumn) &amp;lt;= row) {
                level += '#';
            } else {
                level += ' ';
            }
        }

        console.log(level);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def pyramid(n):
    column_count = 2 * n - 1
    mid_column = column_count // 2

    for row in range(n):
        level = ''

        for column in range(column_count):
            if abs(column - mid_column) &amp;lt;= row:
                level += '#'
            else:
                level += ' '

        print(level)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void pyramid1(int n) {
    int columnCount = 2 * n - 1;
    int midColumn = columnCount / 2;

    for (int row = 0; row &amp;lt; n; row++) {
        StringBuilder level = new StringBuilder();

        for (int column = 0; column &amp;lt; columnCount; column++) {
            if (Math.abs(column - midColumn) &amp;lt;= row) {
                level.append("#");
            } else {
                level.append(" ");
            }
        }

        System.out.println(level);
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  2: Recursive Solution
&lt;/h1&gt;

&lt;p&gt;Here I take an approach a bit different from the one introduced in the course.&lt;/p&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function pyramid(n, row = 0, level = '#') {
    if (n === row) {
        return;
    }

    if (level.length === 2 * n - 1) {
        console.log(level);
        return pyramid(n, row + 1);
    }

    level = level.length &amp;lt; 2 * row ? `#${level}#` : ` ${level} `;
    pyramid(n, row, level);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def pyramid(n, row=0, level='#'):
    if n == row:
        return

    if len(level) == 2 * n - 1:
        print(level)
        return pyramid(n, row+1)

    level = f'#{level}#' if len(level) &amp;lt; 2 * row else f' {level} '
    pyramid(n, row, level)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void pyramid(int n) {
    pyramid(n, 0, new StringBuilder("#"));
}

static void pyramid(int n, int row, StringBuilder level) {
    if (n == row) {
        return;
    }

    if (level.length() == 2 * n - 1) {
        System.out.println(level);
        pyramid(n, row + 1, new StringBuilder("#"));
        return;
    }

    if (level.length() &amp;lt; 2 * row) {
        level.insert(0, "#").append("#");
    } else {
        level.insert(0, " ").append(" ");
    }

    pyramid(n, row, level);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Thank you for reading. I do plan to write this series more often, so I hope to see you soon!&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>javascript</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 9: Printing Steps</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Wed, 10 Oct 2018 00:38:08 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-9-printing-steps-2i05</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-9-printing-steps-2i05</guid>
      <description>&lt;p&gt;This series of articles follows Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages. JavaScript solutions are &lt;a href="https://github.com/StephenGrider/AlgoCasts/blob/master/completed_exercises/"&gt;by Stephen&lt;/a&gt;. I try to "translate" them into Python and Java.&lt;/p&gt;

&lt;p&gt;Today's question is meant to be an introduction to recursions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Write a function that accepts a positive number N.&lt;br&gt;
The function should console log a step shape&lt;br&gt;
with N levels using the # character.  Make sure the&lt;br&gt;
step has spaces on the right hand side!&lt;br&gt;
--- Examples&lt;br&gt;
  steps(2)&lt;br&gt;
      '# '&lt;br&gt;
      '##'&lt;br&gt;
  steps(3)&lt;br&gt;
      '#  '&lt;br&gt;
      '## '&lt;br&gt;
      '###'&lt;br&gt;
  steps(4)&lt;br&gt;
      '#   '&lt;br&gt;
      '##  '&lt;br&gt;
      '### '&lt;br&gt;
      '####'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  1: Iterative Solution
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function steps(n) {
    for (let row = 0; row &amp;lt; n; row++) {
        let stair = '';
        for (let column = 0; column &amp;lt; n; column++) {
            if (column &amp;lt;= row) {
                stair += '#';
            } else {
                stair += ' ';
            }
        }
        console.log(stair);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def steps(n):
    for row in range(n):
        stair = ''
        for column in range(n):
            if column &amp;lt;= row:
                stair += '#'
            else:
                stair += ' '
        print(stair)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void steps(int n) {
    for (int row = 0; row &amp;lt; n; row++) {
        StringBuilder stair = new StringBuilder();
        for (int column = 0; column &amp;lt; n; column++) {
            if (column &amp;lt;= row) {
                stair.append("#");
            } else {
                stair.append(" ");
            }
        }
        System.out.println(stair);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  2: Recursive Solution
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function steps(n, row = 0, stair = '') {
    if (n === row) {
        return;
    }

    if (n === stair.length) {
        console.log(stair);
        return steps(n, row + 1);
    }

    stair += stair.length &amp;lt;= row ? '#' : ' ';
    steps(n, row, stair);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def steps(n, row=0, stair=''):
    if n == row:
        return

    if n == len(stair):
        print(stair)
        return steps(n, row+1)

    stair += '#' if len(stair) &amp;lt;= row else ' '
    steps(n, row, stair)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void steps(int n) {
    steps(n, 0, new StringBuilder());
}

static void steps(int n, int row, StringBuilder stair) {
    if (n == row) {
        return;
    }

    if (n == stair.length()) {
        System.out.println(stair);
        steps(n, row + 1, new StringBuilder());
        return;
    }

    stair.append(stair.length() &amp;lt;= row ? "#" : " ");
    steps(n, row, stair);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 8: Sentence Capitalization</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Wed, 19 Sep 2018 00:51:42 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-8-sentence-capitalization-1ld7</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-8-sentence-capitalization-1ld7</guid>
      <description>&lt;p&gt;It's been a while since I posted the last article. Today's is a nice and simple one for rehab.&lt;/p&gt;

&lt;p&gt;This series of articles follows Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages. JavaScript solutions are &lt;a href="https://github.com/StephenGrider/AlgoCasts/blob/master/completed_exercises/"&gt;by Stephen&lt;/a&gt;. I try to "translate" them into Python and Java.&lt;/p&gt;

&lt;p&gt;Today's question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Write a function that accepts a string.  The function should&lt;br&gt;
capitalize the first letter of each word in the string then&lt;br&gt;
return the capitalized string.&lt;br&gt;
--- Examples&lt;br&gt;
  capitalize('a short sentence') --&amp;gt; 'A Short Sentence'&lt;br&gt;
  capitalize('a lazy fox') --&amp;gt; 'A Lazy Fox'&lt;br&gt;
  capitalize('look, it is working!') --&amp;gt; 'Look, It Is Working!'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  1: Concise solution using built-in libraries
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function capitalize(sentence) {
    const words = [];

    for (let word of sentence.split(' ')) {
        words.push(word[0].toUpperCase() + word.slice(1));
    }

    return words.join(' ');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def capitalize1(sentence: str) -&amp;gt; str:
    words = [word[0].upper() + word[1:] for word in sentence.split()]
    return ' '.join(words)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def capitalize2(sentence: str) -&amp;gt; str:
    return ' '.join([word.capitalize() for word in sentence.split()])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def capitalize3(sentence: str) -&amp;gt; str:
    return sentence.title()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.LinkedList;
import java.util.List;

public static String capitalize(String sentence) {
    List&amp;lt;String&amp;gt; words = new LinkedList&amp;lt;&amp;gt;();

    for (String word : sentence.split(" ")) {
        words.add(String.valueOf(word.charAt(0)).toUpperCase() + word.substring(1));
    }

    return String.join(" ", words);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  2: Brute force solution using a loop
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function capitalize(sentence) {
    let result = sentence[0].toUpperCase();

    for (let i = 1; i &amp;lt; sentence.length; i++) {
        if (sentence[i - 1] === ' ') {
            result += sentence[i].toUpperCase();
        } else {
            result += sentence[i];
        }
    }

    return result;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def capitalize(sentence: str) -&amp;gt; str:
    result = ''

    for i, char in enumerate(sentence):
        if i == 0 or sentence[i - 1] == ' ':
            result += char.upper()
        else:
            result += char

    return result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static String capitalize(String sentence) {
    StringBuilder result = new StringBuilder(String.valueOf(sentence.charAt(0)).toUpperCase());

    for (int i = 1; i &amp;lt; sentence.length(); i++) {
        if (sentence.charAt(i - 1) == ' ') {
            result.append(String.valueOf(sentence.charAt(i)).toUpperCase());
        } else {
            result.append(sentence.charAt(i));
        }
    }

    return result.toString();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thank you for reading so far. I hope to see you again soon!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 7: Anagrams</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Tue, 28 Aug 2018 22:24:12 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-7-anagrams-1lgf</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-7-anagrams-1lgf</guid>
      <description>&lt;p&gt;This is the seventh article of my attempts to follow Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages. JavaScript solutions are &lt;a href="https://github.com/StephenGrider/AlgoCasts/blob/master/completed_exercises/chunk/index.js"&gt;by Stephen&lt;/a&gt;. I try to "translate" it into Python and Java.&lt;/p&gt;

&lt;p&gt;Today's question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check to see if two provided strings are anagrams of eachother.&lt;br&gt;
One string is an anagram of another if it uses the same characters&lt;br&gt;
in the same quantity. Only consider characters, not spaces&lt;br&gt;
or punctuation.  Consider capital letters to be the same as lower case&lt;br&gt;
--- Examples&lt;br&gt;
  anagrams('rail safety', 'fairy tales') --&amp;gt; True&lt;br&gt;
  anagrams('RAIL! SAFETY!', 'fairy tales') --&amp;gt; True&lt;br&gt;
  anagrams('Hi there', 'Bye there') --&amp;gt; False&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  1: Counting each letter
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function anagrams(stringA, stringB) {
  const charMapA = buildCharMap(stringA);
  const charMapB = buildCharMap(stringB);

  if (Object.keys(charMapA).length !== Object.keys(charMapB).length) {
    return false;
  }

  for (let char in charMapA) {
    if (charMapA[char] !== charMapB[char]) {
      return false;
    }
  }

  return true;
}

function buildCharMap(str) {
  const charMap = {};

  for (let char of str.replace(/[^\w]/g, '').toLowerCase()) {
    charMap[char] = charMap[char] + 1 || 1;
  }

  return charMap;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import re
from collections import Counter

def anagrams(string_a: str, string_b: str) -&amp;gt; bool:
    char_map_a = build_counter(string_a)
    char_map_b = build_counter(string_b)

    if len(char_map_a.keys()) != len(char_map_b.keys()):
        return False

    for char in char_map_a.keys():
        if char not in char_map_b or char_map_a[char] != char_map_b[char]:
            return False

    return True

def build_counter(string: str) -&amp;gt; Counter:
    return Counter(re.sub(r'[^\w]', '', string, flags=re.UNICODE).lower())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Actually this works, too:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import re
from collections import Counter

def anagrams(string_a: str, string_b: str) -&amp;gt; bool:
    return build_counter(string_a) == build_counter(string_b)

def build_counter(string: str) -&amp;gt; Counter:
    return Counter(re.sub(r'[^\w]', '', string, flags=re.UNICODE).lower())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.Map;
import java.util.stream.Collectors;

public static boolean anagrams(String stringA, String stringB) {
    Map&amp;lt;Character, Long&amp;gt; charMapA = buildCharMap(stringA);
    Map&amp;lt;Character, Long&amp;gt; charMapB = buildCharMap(stringB);

    if (charMapA.keySet().size() != charMapB.keySet().size()) {
        return false;
    }

    for (char chr : charMapA.keySet()) {
        if (!charMapB.containsKey(chr) || !charMapA.get(chr).equals(charMapB.get(chr))) {
            return false;
        }
    }
    return true;
}

private static Map&amp;lt;Character, Long&amp;gt; buildCharMap(String str) {
    return str.replaceAll("[^\\w]", "")
            .toLowerCase()
            .chars()
            .mapToObj(i -&amp;gt; (char) i)
            .collect(Collectors.groupingBy(c -&amp;gt; c, Collectors.counting()));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  2: Sort to compare
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function anagrams(stringA, stringB) {
  return cleanString(stringA) === cleanString(stringB);
}

function cleanString(str) {
  return str
    .replace(/[^\w]/g, '')
    .toLowerCase()
    .split('')
    .sort()
    .join('');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import re

def anagrams(string_a: str, string_b: str) -&amp;gt; bool:
    return clean_string(string_a) == clean_string(string_b)

def clean_string(string: str) -&amp;gt; str:
    lower = re.sub(r'[^\w]', '', string, flags=re.UNICODE).lower()
    return ''.join(sorted(lower))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.stream.Collectors;

public static boolean anagrams(String stringA, String stringB) {
    return cleanString(stringA).equals(cleanString(stringB));
}

private static String cleanString(String str) {
    return str.replaceAll("[^\\w]", "")
            .toLowerCase()
            .chars()
            .mapToObj(i -&amp;gt; (char) i)
            .sorted()
            .map(String::valueOf)
            .collect(Collectors.joining());
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope you enjoyed this. I'd appreciate any comments and feedback.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 6: Array Chunking</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Tue, 14 Aug 2018 23:51:04 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-6-array-chunking-3mii</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-6-array-chunking-3mii</guid>
      <description>&lt;p&gt;This is the sixth article of my attempts to follow Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages. JavaScript solutions are &lt;a href="https://github.com/StephenGrider/AlgoCasts/blob/master/completed_exercises/chunk/index.js"&gt;by Stephen&lt;/a&gt;. I try to "translate" it into Python and Java.&lt;/p&gt;

&lt;p&gt;Today's question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Given an array and chunk size, divide the array into many subarrays&lt;br&gt;
where each subarray is of length size&lt;br&gt;
--- Examples&lt;br&gt;
chunk([1, 2, 3, 4], 2) --&amp;gt; [[ 1, 2], [3, 4]]&lt;br&gt;
chunk([1, 2, 3, 4, 5], 2) --&amp;gt; [[ 1, 2], [3, 4], [5]]&lt;br&gt;
chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --&amp;gt; [[ 1, 2, 3], [4, 5, 6], [7, 8]]&lt;br&gt;
chunk([1, 2, 3, 4, 5], 4) --&amp;gt; [[ 1, 2, 3, 4], [5]]&lt;br&gt;
chunk([1, 2, 3, 4, 5], 10) --&amp;gt; [[ 1, 2, 3, 4, 5]]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I add to each solution the time (ms) it took to divide the array with 10,000,000 elements into subarrays with 1,000 elements.&lt;/p&gt;

&lt;h1&gt;
  
  
  1: Adding each element
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function chunk1(array, size) { // 227.480ms
    const chunked = [];

    for (let element of array) {
        const lastChunk = chunked[chunked.length - 1];

        if (!lastChunk || lastChunk.length === size) {
            chunked.push([element]);
        } else {
            lastChunk.push(element);
        }
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def chunk1a(lst: list, size: int) -&amp;gt; list: # 2409.636ms
    chunked = []

    for element in lst:
        if not chunked or len(chunked[-1]) == size:
            chunked.append([])
        last_chunk = chunked[-1]
        last_chunk.append(element)

    return chunked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Like in &lt;a href="https://dev.to/tommy3/learning-algorithms-with-js-python-and-java-4-maxchar-1eo2"&gt;exercise 4&lt;/a&gt;, we can't start with &lt;code&gt;last_chunk = chunked[-1]&lt;/code&gt; as in JS because it would cause an IndexError.&lt;/p&gt;

&lt;p&gt;Since this looks for the last element of &lt;code&gt;chunked&lt;/code&gt; twice, it gets a little faster by rewriting it as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def chunk1b(lst: list, size: int) -&amp;gt; list: # 2014.493ms
    chunked = []

    for element in lst:
        if not chunked:
            chunked.append([])
        last_chunk = chunked[-1]
        if len(last_chunk) == size:
            last_chunk = []
            chunked.append(last_chunk)
        last_chunk.append(element)

    return chunked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also thought of using collections.deque instead of a list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from collections import deque

def chunk1c(lst: list, size: int) -&amp;gt; list: # 2618.956ms
    chunked = deque()

    for element in lst:
        if not chunked or len(chunked[-1]) == size:
            chunked.append([])
        last_chunk = chunked[-1]
        last_chunk.append(element)

    return list(chunked)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but this resulted in a bit longer execution time than the first solution.&lt;/p&gt;

&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.List;

public static List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunk1a(List&amp;lt;Integer&amp;gt; list, int size) { // 2072.358ms
    List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunked = new ArrayList&amp;lt;&amp;gt;();

    for (int element : list) {
        if (chunked.isEmpty() || chunked.get(chunked.size() - 1).size() == size) {
            chunked.add(new ArrayList&amp;lt;&amp;gt;());
        }
        List&amp;lt;Integer&amp;gt; lastChunk = chunked.get(chunked.size() - 1);
        lastChunk.add(element);
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A solution like the Python 1b is much faster than the first one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.List;

public static List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunk1b(List&amp;lt;Integer&amp;gt; list, int size) { // 404.818ms
    List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunked = new ArrayList&amp;lt;&amp;gt;();

    for (int element : list) {
        if (chunked.isEmpty()) {
            chunked.add(new ArrayList&amp;lt;&amp;gt;());
        }
        List&amp;lt;Integer&amp;gt; lastChunk = chunked.get(chunked.size() - 1);
        if (lastChunk.size() == size) {
            lastChunk = new ArrayList&amp;lt;&amp;gt;();
            chunked.add(lastChunk);
        }
        lastChunk.add(element);
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can be improved even more when I use LinkedLists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.LinkedList;
import java.util.List;

public static List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunk1c(List&amp;lt;Integer&amp;gt; list, int size) { // 295.885ms
    LinkedList&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunked = new LinkedList&amp;lt;&amp;gt;();

    for (int element : list) {
        if (chunked.isEmpty()) {
            chunked.add(new LinkedList&amp;lt;&amp;gt;());
        }
        List&amp;lt;Integer&amp;gt; lastChunk = chunked.getLast();
        if (lastChunk.size() == size) {
            lastChunk = new ArrayList&amp;lt;&amp;gt;();
            chunked.add(lastChunk);
        }
        lastChunk.add(element);
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Incidentally, here's the LinkedList version of the first Java code, and it's much slower than any solution. I wonder why because it looks to me essentially the same as the 1c above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunk1d(List&amp;lt;Integer&amp;gt; list, int size) { // 4556.835ms
    LinkedList&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunked = new LinkedList&amp;lt;&amp;gt;();

    for (int element : list) {
        if (chunked.isEmpty() || chunked.getLast().size() == size) {
            chunked.add(new LinkedList&amp;lt;&amp;gt;());
        }
        List&amp;lt;Integer&amp;gt; lastChunk = chunked.getLast();
        lastChunk.add(element);
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This post has got longer than I'd expected, but now comes the second set of solutions, which are more concise and also faster.&lt;/p&gt;

&lt;h1&gt;
  
  
  2: Using a slice method
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function chunk2(array, size) { // 83.652ms
    const chunked = [];
    let index = 0;

    while (index &amp;lt; array.length) {
        chunked.push(array.slice(index, index + size));
        index += size;
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def chunk2a(lst: list, size: int) -&amp;gt; list: # 240.898ms
    chunked = []
    index = 0

    while index &amp;lt; len(lst):
        chunked.append(lst[index:index+size])
        index += size

    return chunked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Pythonic one-liner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def chunk2b(lst: list, size: int) -&amp;gt; list: # 234.880ms
    return [lst[i:i+size] for i in range(0, len(lst), size)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.List;
import java.lang.Math;

public static List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunk2(List&amp;lt;Integer&amp;gt; list, int size) { // 1.250ms
    List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; chunked = new LinkedList&amp;lt;&amp;gt;();
    int index = 0;

    while (index &amp;lt; list.size()) {
        chunked.add(list.subList(index, Math.min(index + size, list.size())));
        index += size;
    }

    return chunked;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This one is definitely the fastest of all!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 5: FizzBuzz</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Wed, 08 Aug 2018 15:56:57 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-5-fizzbuzz-1ik</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-5-fizzbuzz-1ik</guid>
      <description>&lt;p&gt;This is the fifth article of my attempts to follow Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages.&lt;/p&gt;

&lt;p&gt;When I wrote &lt;a href="https://dev.to/tommy3/learning-algorithms-with-js-python-and-java-4-maxchar-1eo2"&gt;my last post&lt;/a&gt; a couple of days ago, I had only 5 followers, and now I have 35! I also received comments for the first time. I'm so happy I started this series, but now I feel kind of embarrassed to write about so famous a question at this timing.&lt;/p&gt;

&lt;p&gt;There must be thousands of solutions, but here I just focus on showing two JS codes and trying to "translate" them into Python and Java as faithfully as possible.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Write a program that console logs the numbers&lt;br&gt;
from 1 to n. But for multiples of three print&lt;br&gt;
“fizz” instead of the number and for the multiples&lt;br&gt;
of five print “buzz”. For numbers which are multiples&lt;br&gt;
of both three and five print “fizzbuzz”.&lt;br&gt;
--- Example&lt;br&gt;
  fizzBuzz(5);&lt;br&gt;
  1&lt;br&gt;
  2&lt;br&gt;
  fizz&lt;br&gt;
  4&lt;br&gt;
  buzz&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. Simple
&lt;/h2&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function fizzBuzz(n) {
    for (let i = 1; i &amp;lt;= n; i++) {
        if (i % 15 === 0) {
            console.log('fizzbuzz');
        } else if (i % 3 === 0) {
            console.log('fizz');
        } else if (i % 5 === 0) {
            console.log('buzz');
        } else {
            console.log(i);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fizz_buzz(n):
    for i in range(1, n+1):
        if i % 15 == 0:
            print('fizzbuzz')
        elif i % 3 == 0:
            print('fizz')
        elif i % 5 == 0:
            print('buzz')
        else:
            print(i)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void fizzBuzz(int n) {
    for (int i = 1; i &amp;lt;= n; i++) {
        if (i % 15 == 0) {
            System.out.println("fizzbuzz");
        } else if (i % 3 == 0) {
            System.out.println("fizz");
        } else if (i % 5 == 0) {
            System.out.println("buzz");
        } else {
            System.out.println(i);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  2. More Concise
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function fizzBuzz(n) {
    for (let i = 1; i &amp;lt;= n; i++) {
        console.log((i % 3 ? '' : 'fizz')
            + (i % 5 ? '' : 'buzz') || i);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fizz_buzz(n):
    for i in range(1, n+1):
        print(('' if i % 3 else 'fizz') +
              ('' if i % 5 else 'buzz') or i)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static void fizzBuzz(int n) {
    for (int i = 1; i &amp;lt;= n; i++) {
        String result = (i % 3 &amp;gt; 0 ? "" : "fizz") 
                + (i % 5 &amp;gt; 0 ? "" : "buzz");
        if (result.equals("")) {
            result = String.valueOf(i);
        }
        System.out.println(result);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I'm not really satisfied with the last Java code. I'd love to know if a more literal equivalent is possible. Thank you in advance for your comments!&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>beginners</category>
      <category>learning</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 4: MaxChar</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Mon, 06 Aug 2018 15:36:20 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-4-maxchar-1eo2</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-4-maxchar-1eo2</guid>
      <description>&lt;p&gt;This is the fourth article of my attempts to follow Stephen Grider's &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Udemy course&lt;/a&gt; in three different languages.&lt;/p&gt;

&lt;p&gt;First I quote todays's question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Given a string, return the character that is most&lt;br&gt;
commonly used in the string.&lt;br&gt;
--- Examples&lt;br&gt;
maxChar("abcccccccd") === "c"&lt;br&gt;
maxChar("apple 1231111") === "1"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function maxChar(str) {
    const charMap = {};
    let max = 0;
    let maxChar = '';

    for (let char of str) {
        if (charMap[char]) {
            charMap[char]++
        } else {
            charMap[char] = 1;
        }
    }

    for (let char in charMap) {
        if (charMap[char] &amp;gt; max) {
            max = charMap[char];
            maxChar = char;
        }
    }

    return maxChar;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stephen rewrites the first for loop as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    for (let char of str) {
        charMap[char] = charMap[char] + 1 || 1;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is possible because &lt;code&gt;anObject['nonexistentKey']&lt;/code&gt; returns &lt;code&gt;undefined&lt;/code&gt;, &lt;code&gt;undefined + 1&lt;/code&gt; return &lt;code&gt;NaN&lt;/code&gt;, which is falsy.&lt;/p&gt;

&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def max_char(str):
    char_map = {}
    max = 0
    max_char = ''

    for char in str:
        char_map.setdefault(char, 0)
        char_map[char] += 1

    for char in char_map:
        if char_map[char] &amp;gt; max:
            max = char_map[char]
            max_char = char

    return max_char
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Python, you can't just try &lt;code&gt;char_map[char] += 1&lt;/code&gt; as in JS, because it would throw a KeyError if the key doesn't exist yet.&lt;/p&gt;

&lt;p&gt;More concisely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def max_char(str):
    char_map = {}

    for char in str:
        char_map.setdefault(char, 0)
        char_map[char] += 1

    return max(char_map, key=char_map.get)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source: &lt;a href="https://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary"&gt;https://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary&lt;/a&gt;&lt;br&gt;
&lt;code&gt;max(char_map, key=char_map.get)&lt;/code&gt; is the same as &lt;code&gt;max(char_map.keys(), key=char_map.get)&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;key=char_map.get&lt;/code&gt; is needed to find the (key, value) tuple pair in the dictionary whose &lt;em&gt;value&lt;/em&gt; is the largest. &lt;code&gt;max({'a': 2, 'b': 1})&lt;/code&gt; returns 'b'.&lt;/p&gt;

&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.HashMap;
import java.util.Map;

public static char maxChar2(String str) {
    Map&amp;lt;Character, Integer&amp;gt; charMap = new HashMap&amp;lt;&amp;gt;();

    for (char chr : str.toCharArray()) {
        Integer chrCount = charMap.get(chr);
        if (chrCount == null) {
            chrCount = 0;
        }
        charMap.put(chr, chrCount + 1);
    }

    int max = 0;
    char maxChar = '\0';

    for (Map.Entry&amp;lt;Character, Integer&amp;gt; entry : charMap.entrySet()) {
        int value = entry.getValue();
        if (value &amp;gt; max) {
            max = value;
            maxChar = entry.getKey();
        }
    }

    return maxChar;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using Stream:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static char maxChar(String str) {
    Map&amp;lt;Character, Long&amp;gt; charMap = str.chars()
            .mapToObj(i -&amp;gt; (char) i)
            .collect(Collectors.groupingBy(
                    c -&amp;gt; c, Collectors.counting()));

    return charMap.entrySet().stream()
            .collect(Collectors.groupingBy(
                    Map.Entry::getValue,
                    TreeMap::new,
                    Collectors.mapping(
                            Map.Entry::getKey, Collectors.toList())))
            .lastEntry()
            .getValue()
            .get(0);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The return statement can be made simpler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    return charMap.entrySet().stream()
            .max(Map.Entry.comparingByValue())
            .get()
            .getKey();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;References:&lt;br&gt;
&lt;a href="https://codereview.stackexchange.com/questions/133058/print-max-occurring-character-in-a-string"&gt;https://codereview.stackexchange.com/questions/133058/print-max-occurring-character-in-a-string&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/48280361/how-to-count-occurrences-for-each-value-in-multimap-java"&gt;https://stackoverflow.com/questions/48280361/how-to-count-occurrences-for-each-value-in-multimap-java&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/42060294/using-java8-stream-to-find-the-highest-values-from-map"&gt;https://stackoverflow.com/questions/42060294/using-java8-stream-to-find-the-highest-values-from-map&lt;/a&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>beginners</category>
      <category>learning</category>
      <category>java</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 3: Integer Reversal</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Thu, 02 Aug 2018 13:02:57 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-3-integer-reversal-1dmg</link>
      <guid>https://forem.com/tommy3/learning-algorithms-with-js-python-and-java-3-integer-reversal-1dmg</guid>
      <description>&lt;p&gt;I joined dev.to this week and posted two little articles. Thank you for the hearts and unicorns (though I'm still not really sure what unicorns mean)!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/StephenGrider/AlgoCasts/tree/master/completed_exercises/reverseint"&gt;The third question&lt;/a&gt; in the &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;Stephen Grider's course&lt;/a&gt; is to reverse an integer. I'll just quote the directions here.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--- Directions&lt;br&gt;
Given an integer, return an integer that is the reverse ordering of numbers.&lt;br&gt;
--- Examples&lt;br&gt;
  reverseInt(15) === 51&lt;br&gt;
  reverseInt(981) === 189&lt;br&gt;
  reverseInt(500) === 5&lt;br&gt;
  reverseInt(-15) === -51&lt;br&gt;
  reverseInt(-90) === -9&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stephen's JS solution is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverseInt(n) {
    const reversed = n
        .toString()
        .split('')
        .reverse()
        .join('');

    return parseInt(reversed) * Math.sign(n);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works because &lt;code&gt;parseInt('12-')&lt;/code&gt; returns &lt;code&gt;12&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A neater solution might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverseInt(n) {
    const absReversed = Math.abs(n)
        .toString()
        .split('')
        .reverse()
        .join('');

    return Number(absReversed) * Math.sign(n);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My attempt in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def reverse_int(n):
    abs_reversed = str(abs(n))[::-1]
    if n &amp;gt; 0:
        return int(abs_reversed)
    else:
        return -int(abs_reversed)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;int('12-') throws a ValueError, so &lt;code&gt;abs()&lt;/code&gt; cannot be omitted.&lt;br&gt;
I wonder if there's a cooler way to do it.&lt;/p&gt;

&lt;p&gt;And Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static int reverseInt(int n) {
    String abs = Integer.toString(Math.abs(n));
    String absReversed = new StringBuilder(abs).reverse().toString();
    return Integer.parseInt(absReversed) * Integer.signum(n);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;parseInt('12-')&lt;/code&gt; throws a NumberFormatException in Java, so &lt;code&gt;Math.abs()&lt;/code&gt; cannot be omitted.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>algorithms</category>
      <category>learning</category>
      <category>python</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 2: Palindrome</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Tue, 31 Jul 2018 15:46:00 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorighm-with-js-python-and-java-2-palindrome-42jd</link>
      <guid>https://forem.com/tommy3/learning-algorighm-with-js-python-and-java-2-palindrome-42jd</guid>
      <description>&lt;p&gt;Here's my second attempt at solving the same problem using three different languages: JavaScript, Python and Java.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/StephenGrider/AlgoCasts/tree/master/completed_exercises/palindrome"&gt;Today's question&lt;/a&gt; is to judge whether the given string is a palindrome.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 The Most Straightforward Solution
&lt;/h2&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function isPalindrome(str) {
    const reversed = str.split('').reverse().join('');
    return str === reversed;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def is_palindrome(str):
    return str[::-1] == str
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static boolean isPalindrome(String str) {
    String reversed = new StringBuilder(str).reverse().toString();
    return reversed.equals(str);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that &lt;code&gt;return reversed == str;&lt;/code&gt; doesn't work because &lt;code&gt;reversed&lt;/code&gt; and &lt;code&gt;str&lt;/code&gt; point to different objects.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Elegant (But Redundant)
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function isPalindrome(str) {
    return str.split('').every((char, i) =&amp;gt; {
        return char === str[str.length - i - 1];
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its Python equivalent, without redundancy, would be perhaps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def is_palindrome(str):
    return all([str[i] == str[-i-1] for i in range(len(str)//2)])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static boolean isPalindrome(String str) {
    int n = str.length();
    return IntStream.range(0, n/2)
            .allMatch(i -&amp;gt; str.charAt(i) == str.charAt(n - i - 1));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  3. An Alternative With a For Loop
&lt;/h1&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function isPalindrome(str) {
    const n = str.length;
    for (let i = 0; i &amp;lt; Math.floor(n/2); i++) {
        if (str[i] != str[n - i - 1]) {
            return false;
        }
    }
    return true;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def is_palindrome(str):
   for i in range(len(str)//2):
         if str[i] != str[-i-1]:
                 return False
   return True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static boolean isPalindrome(String str) {
    int n = str.length();
    for (int i = 0; i &amp;lt; n / 2; i++)
        if (str.charAt(i) != str.charAt(n - i - 1)) {
            return false;
        }
    return true;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notes:&lt;br&gt;
5 / 2 is 2.5 in JavaScript and Python 3.&lt;br&gt;
5 / 2 is 2 in Java.&lt;br&gt;
5 // 2 is 2 in Python 3.&lt;/p&gt;

&lt;p&gt;References:&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/11758791/python-3-2-palindrome"&gt;https://stackoverflow.com/questions/11758791/python-3-2-palindrome&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/4138827/check-string-for-palindrome"&gt;https://stackoverflow.com/questions/4138827/check-string-for-palindrome&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>algorithms</category>
      <category>learning</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Learning Algorithms with JS, Python and Java 1: String Reversal</title>
      <dc:creator>tommy-3</dc:creator>
      <pubDate>Tue, 31 Jul 2018 00:47:33 +0000</pubDate>
      <link>https://forem.com/tommy3/learning-algorighm-with-js-python-and-java-1-string-reversal-33lf</link>
      <guid>https://forem.com/tommy3/learning-algorighm-with-js-python-and-java-1-string-reversal-33lf</guid>
      <description>&lt;p&gt;When I study natural languages, I've always enjoyed comparing them. It was intriguing to know, for example, that the English and German prefix "un-", the Latin prefix "in-" and the Greek prefix "ἀ-" are all thought to stem from the same Proto-Indo-European prefix &lt;a href="https://en.wiktionary.org/wiki/Reconstruction:Proto-Indo-European/n%CC%A5-"&gt;"*n̥-"&lt;/a&gt;. As a (semi-)beginner of programming, I thought it might be also fun to try to learn them in a comparative manner.&lt;/p&gt;

&lt;p&gt;I'll follow Stephen Grider's Udemy course &lt;a href="https://www.udemy.com/coding-interview-bootcamp-algorithms-and-data-structure/"&gt;The Coding Interview Bootcamp: Algorithms + Data Structures&lt;/a&gt;, which is completely in JavaScript, and solve the same question in JavaScript, Python and Java, which are just three languages I happen to know the basics of. &lt;/p&gt;

&lt;p&gt;The first task in the course is to reverse the given string. Stephen introduces three JavaScript answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Simple Solution
&lt;/h2&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverse(str) {
    return str.split('').reverse().join('');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its translation into Python would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def reverse(str):
    chars = [char for char in str]
    chars.reverse()
    return ''.join(chars)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In idiomatic Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def reverse(str):
    return str[::-1]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Java equivalent of the first JS code would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.apache.commons.lang3.ArrayUtils;

static String reverse(String str) {
    char[] chars = str.toCharArray();
    ArrayUtils.reverse(chars);
    return String.valueOf(chars);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The standard Java way to achieve it seems to be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String reverse(String str) {
    return new StringBuilder(str).reverse().toString();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Using a For Loop
&lt;/h2&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverse(str) {
    let reversed = '';

    for (let char of str) {
        reversed = char + reversed;
    }

    return reversed;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def reverse(str):
    reversed = ''

    for char in str:
        reversed = char + reversed

    return reversed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String reverse(String str) {
    StringBuilder reversed = new StringBuilder();

    for (char character : str.toCharArray()) {
        reversed.insert(0, character);
    }

    return reversed.toString();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which is actually very slow when a long string is given, because it searches for the 0th position every time.&lt;/p&gt;

&lt;p&gt;This one works fast enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String reverse(String str) {
    StringBuilder reversed = new StringBuilder();

    for (int i = str.length() - 1; i &amp;gt;= 0; i--) {
        reversed.append(str.charAt(i));
    }

    return reversed.toString();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  3. Using the Reduce Method
&lt;/h1&gt;

&lt;p&gt;This is not very practical or efficient, but just to explore what the languages offer.&lt;/p&gt;

&lt;p&gt;JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverse(str) {
    return str.split('').reduce((reversed, char) =&amp;gt; char + reversed, '');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from functools import reduce

def reverse(str):
    return reduce(lambda reversed, char: char + reversed, str)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String reverse6(String str) {
    return str.chars()
            .mapToObj(c -&amp;gt; String.valueOf((char) c))
            .reduce("", (reversed, chr) -&amp;gt; chr + reversed);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope someone would find this interesting or helpful and I'd appreciate any suggestion or comment.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>beginners</category>
      <category>learning</category>
      <category>java</category>
    </item>
  </channel>
</rss>
