Find the direction from given string - GeeksforGeeks

01 Apr, 2021
Given a string containing only L’s and R’s which represents left rotation and right rotation respectively. The task is to find the final direction of pivot(i.e N/E/S/W). Let a pivot is pointed towards the north(N) in a compass. 
Examples: 
Input: str = "LLRLRRL"
Output: W
In this input string we rotate pivot to left
when a L char is encountered and right when 
R is encountered. 

Input: str = "LL"
Output: S
Approach:  
Use a counter that incremented on seeing R and decremented on seeing L.Finally, use modulo on the counter to get the direction.If the count is negative then directions will be different. Check the code for negative as well.
Use a counter that incremented on seeing R and decremented on seeing L.
Finally, use modulo on the counter to get the direction.
If the count is negative then directions will be different. Check the code for negative as well.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// CPP implementation of above approach#include <bits/stdc++.h>using namespace std; // Function to find the final directionstring findDirection(string s){    int count = 0;    string d = "";     for (int i = 0; i < s.length(); i++) {         if (s[0] == '\n')            return NULL;         if (s[i] == 'L')            count--;        else {            if (s[i] == 'R')                count++;        }    }     // if count is positive that implies    // resultant is clockwise direction    if (count > 0) {         if (count % 4 == 0)            d = "N";        else if (count % 4 == 1)            d = "E";        else if (count % 4 == 2)            d = "S";        else if (count % 4 == 3)            d = "W";    }     // if count is negative that implies    // resultant is anti-clockwise direction    if (count < 0) {         if (count % 4 == 0)            d = "N";        else if (count % 4 == -1)            d = "W";        else if (count % 4 == -2)            d = "S";        else if (count % 4 == -3)            d = "E";    }    return d;} // Driver codeint main(){    string s = "LLRLRRL";    cout << (findDirection(s)) << endl;     s = "LL";    cout << (findDirection(s)) << endl;} // This code is contributed by// SURENDRA_GANGWAR
// Java implementation of above approachimport java.util.*; class GFG {     // Function to find the final direction    static String findDirection(String s)    {        int count = 0;        String d = "";         for (int i = 0; i < s.length(); i++) {             if (s.charAt(0) == '\n')                return null;             if (s.charAt(i) == 'L')                count--;            else {                if (s.charAt(i) == 'R')                    count++;            }        }         // if count is positive that implies        // resultant is clockwise direction        if (count > 0) {             if (count % 4 == 0)                d = "N";            else if (count % 4 == 1)                d = "E";            else if (count % 4 == 2)                d = "S";            else if (count % 4 == 3)                d = "W";        }         // if count is negative that implies        // resultant is anti-clockwise direction        if (count < 0) {             if (count % 4 == 0)                d = "N";            else if (count % 4 == -1)                d = "W";            else if (count % 4 == -2)                d = "S";            else if (count % 4 == -3)                d = "E";        }        return d;    }     // Driver code    public static void main(String[] args)    {        String s = "LLRLRRL";        System.out.println(findDirection(s));         s = "LL";        System.out.println(findDirection(s));    }}
# Python3 implementation of# the above approach # Function to find the# final direction  def findDirection(s):     count = 0    d = ""     for i in range(len(s)):        if (s[i] == 'L'):            count -= 1        else:            if (s[i] == 'R'):                count += 1     # if count is positive that    # implies resultant is clockwise    # direction    if (count > 0):        if (count % 4 == 0):            d = "N"        elif (count % 4 == 10):            d = "E"        elif (count % 4 == 2):            d = "S"        elif (count % 4 == 3):            d = "W"     # if count is negative that    # implies resultant is anti-    # clockwise direction    if (count < 0):        count *= -1        if (count % 4 == 0):            d = "N"        elif (count % 4 == 1):            d = "W"        elif (count % 4 == 2):            d = "S"        elif (count % 4 == 3):            d = "E"     return d  # Driver codeif __name__ == '__main__':     s = "LLRLRRL"    print(findDirection(s))     s = "LL"    print(findDirection(s)) # This code is contributed by 29AjayKumar
// C# implementation of above approachusing System; class GFG {     // Function to find the final direction    static String findDirection(String s)    {        int count = 0;        String d = "";         for (int i = 0; i < s.Length; i++) {             if (s[0] == '\n')                return null;             if (s[i] == 'L')                count--;            else {                if (s[i] == 'R')                    count++;            }        }         // if count is positive that implies        // resultant is clockwise direction        if (count > 0) {             if (count % 4 == 0)                d = "N";            else if (count % 4 == 1)                d = "E";            else if (count % 4 == 2)                d = "S";            else if (count % 4 == 3)                d = "W";        }         // if count is negative that implies        // resultant is anti-clockwise direction        if (count < 0) {             if (count % 4 == 0)                d = "N";            else if (count % 4 == -1)                d = "W";            else if (count % 4 == -2)                d = "S";            else if (count % 4 == -3)                d = "E";        }        return d;    }     // Driver code    public static void Main()    {        String s = "LLRLRRL";        Console.WriteLine(findDirection(s));         s = "LL";        Console.WriteLine(findDirection(s));    }} // This code is contributed by Shashank
<?php// PHP implementation of above approach // Function to find the final directionfunction findDirection($s){    $count = 0;    $d = "";     for ($i = 0;         $i < strlen($s); $i++)    {        if ($s[0] == '\n')            return null;         if ($s[$i] == 'L')            $count -= 1;        else        {            if ($s[$i] == 'R')                $count += 1;        }    }                 // if count is positive that implies    // resultant is clockwise direction    if ($count > 0)    {        if ($count % 4 == 0)            $d = "N";        else if ($count % 4 == 1)            $d = "E";        else if ($count % 4 == 2)            $d = "S";        else if ($count % 4 == 3)            $d = "W";    }         // if count is negative that    // implies resultant is    // anti-clockwise direction    if ($count < 0)    {        if ($count % 4 == 0)            $d = "N";        else if ($count % 4 == -1)            $d = "W";        else if ($count % 4 == -2)            $d = "S";        else if ($count % 4 == -3)            $d = "E";    }    return $d;} // Driver code$s = "LLRLRRL";echo findDirection($s)."\n"; $s = "LL";echo findDirection($s)."\n"; // This code is contributed// by ChitraNayal   ?>
<script>    // Javascript implementation of above approach         // Function to find the final direction    function findDirection(s)    {        let count = 0;        let d = "";          for (let i = 0; i < s.length; i++) {              if (s[0] == '\n')                return null;              if (s[i] == 'L')                count--;            else {                if (s[i] == 'R')                    count++;            }        }          // if count is positive that implies        // resultant is clockwise direction        if (count > 0) {              if (count % 4 == 0)                d = "N";            else if (count % 4 == 1)                d = "E";            else if (count % 4 == 2)                d = "S";            else if (count % 4 == 3)                d = "W";        }          // if count is negative that implies        // resultant is anti-clockwise direction        if (count < 0) {              if (count % 4 == 0)                d = "N";            else if (count % 4 == -1)                d = "W";            else if (count % 4 == -2)                d = "S";            else if (count % 4 == -3)                d = "E";        }        return d;    }         let s = "LLRLRRL";    document.write(findDirection(s) + "</br>");     s = "LL";    document.write(findDirection(s));                 // This code is contributed by divyeshrabadiya07.</script>
W
S
Time Complexity: O(N) where N is the length of the stringAuxiliary Space: O(1)
Shashank12
ukasp
SURENDRA_GANGWAR
29AjayKumar
ujjwalgoel1103
divyeshrabadiya07
Constructive Algorithms
Modular Arithmetic
Competitive Programming
Strings
Strings
Modular Arithmetic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 15 Websites for Coding Challenges and Competitions
Breadth First Traversal ( BFS ) on a 2D array
Shortest path in a directed graph by Dijkstra’s algorithm
Count of strings whose prefix match with the given string to a given length k
Graph implementation using STL for competitive programming | Set 2 (Weighted graph)
Write a program to reverse an array or string
Reverse a string in Java
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string
C++ Data Types