Find the direction from given string
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.
Below is the implementation of the above approach:
C++
// CPP implementation of above approach #include <bits/stdc++.h> using namespace std; // Function to find the final direction 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 int main() { string s = "LLRLRRL" ; cout << (findDirection(s)) << endl; s = "LL" ; cout << (findDirection(s)) << endl; } // This code is contributed by // SURENDRA_GANGWAR |
Java
// Java implementation of above approach import 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
# 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 = = 1 ): 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 code if __name__ = = '__main__' : s = "LLRLRRL" print (findDirection(s)) s = "LL" print (findDirection(s)) # This code is contributed by 29AjayKumar |
C#
// C# implementation of above approach using 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 // PHP implementation of above approach // Function to find the final direction function 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 ?> |
Javascript
<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> |
Output
W S
Time Complexity: O(N) where N is the length of the string
Auxiliary Space: O(1)