Leetcode-editorials
Contribute
  • Leetcode question of the day
  • 08-August
    • 26. Maximum Length of Pair Chain
    • 28. Implement stack using queues
    • 29. Minimum Penalty for a Shop
    • 30. Minimum Replacements to Sort the Array
    • 31. Minimum Number of Taps to Open to Water a Garden
  • 09-September
    • 01. Counting Bits
    • 02. Extra Characters in a String
    • 03. Unique Paths
    • 04. Linked List Cycle
    • 05. Copy List with Random Pointer
    • 06. Split Linked List in Parts
    • 07. Reverse Linked List II
    • 08. Pascal's Triangle
    • 09. Combination Sum IV
    • 10. Count All Valid Pickup and Delivery Options
    • 11. Group the People Given the Group Size They Belong To
    • 12. Minimum Deletions to Make Character Frequencies Unique
    • 13. Candy
    • 14. Reconstruct Itinerary
    • 15. Min Cost to Connect All Points
    • 16. Path With Minimum Effort
    • 17. Shortest Path Visiting All Nodes
    • 18. The K Weakest Rows in a Matrix
    • 19. Find the Duplicate Number
    • 20. Minimum Operations to Reduce X to Zero
    • 21-Median of Two Sorted Arrays
    • 22- Is Subsequence
    • 23- Longest String Chain
    • 24- Champagne Tower
    • 25- Find the Difference
    • 26- Remove Duplicate Letters
    • 27- Decoded String at Index
    • 28- Sort Array By Parity
    • 29- Monotonic Array
    • 30- 132 Pattern
  • 10-October
    • 01. Reverse Words in a String III
    • 02. Remove Colored Pieces if Both Neighbors are the Same Color
    • 03. Number of Good Pairs
    • 04. Design HashMap
    • 05. Majority Element II
    • 06. Integer Break
    • 07. Build Array Where You Can Find The Maximum Exactly K Comparisons
  • 11-November
    • 01. Find Mode in Binary Search Tree
    • 02. Count Nodes Equal to Average of Subtree
    • 03. Build an Array With Stack Operations
    • 04. Last Moment Before All Ants Fall Out of a Plank
    • 07. Eliminate Maximum Number of Monsters
  • Leetcode Contests
    • Weekly Contest
      • Weekly-Contest-360
Powered by GitBook
On this page
  • My Approach
  • Time and Auxiliary Space Complexity
  • Code (C++)
  • Contribution and Support

Was this helpful?

Edit on GitHub
  1. 09-September

27- Decoded String at Index

Previous26- Remove Duplicate LettersNext28- Sort Array By Parity

Last updated 1 year ago

Was this helpful?

The problem can be found at the following link:

My Approach

  1. Initialize decodedLength to 0: This variable will keep track of the total length of the decoded string as we iterate through it. It's initially set to 0.

  2. Iterate through each character in the input string s using a for-each loop:

    • If the character c is a digit (checked using isdigit()), it means we need to repeat the characters seen so far in the decoded string by a factor of c - '0' times (convert the character to an integer). So, update decodedLength by multiplying it by c - '0'.

    • If the character is not a digit, it represents a single character in the decoded string, so increment decodedLength by 1.

  3. Reverse Iterate through the string s from the end to the beginning (right to left):

    • For each character curr at index i:

      • If curr is a digit, it means that the previous portion of the decoded string is repeated curr - '0' times. To find the effective length of the decoded string up to this point, divide decodedLength by curr - '0', and update decodedLength accordingly.

      • Update k by taking its modulo with the current decodedLength. This ensures that k stays within the bounds of the current portion of the decoded string.

      • If k becomes 0 after the modulo operation or if decodedLength equals k, it means that k corresponds to the current character curr. In this case, return a string containing only curr.

  4. If the loop completes without finding a character to return, return an empty string, indicating that the decoded string is not found within the given input parameters.

Time and Auxiliary Space Complexity

  • Time Complexity: O(n)

  • Auxiliary Space Complexity: O(1)

Code (C++)


class Solution {
public:
    string decodeAtIndex(string s, int k) {
        long long decodedLength = 0;
        for(auto c : s){
            if(isdigit(c)){
                decodedLength = decodedLength * ( c - '0');
            }else{
                decodedLength++;
            }
        }

        for(int i = s.length() - 1; i >= 0; i--){
            char curr = s[i];
            if(isdigit(curr)){
                decodedLength = decodedLength/(curr - '0');
                k = k % decodedLength;
            }else{
                if( k == 0 || decodedLength == k){
                    return string(1,curr);
                }
                decodedLength--;
            }
        }

        return "";
    }
};

Contribution and Support

For discussions, questions, or doubts related to this solution, please visit our . We welcome your input and aim to foster a collaborative learning environment.

If you find this solution helpful, consider supporting us by giving a ⭐ star to the repository.

Question Link
discussion section
rishabhv12/Daily-Leetcode-Solution