Given a 0-indexed string word and a character ch, reverse the segment of word that starts at index 0 and ends at the index of the first occurrence of ch (inclusive). If the character ch does not exist in word, do nothing.

For example, if word = "abcdefd" and ch = "d", then you should reverse the segment that starts at 0 and ends at 3 (inclusive). The resulting string will be "dcbaefd". Return the resulting string.

Example 1:

Input: word = "abcdefd", ch = "d"

Output: "dcbaefd"

Explanation: The first occurrence of "d" is at index 3. Reverse the part of word from 0 to 3 (inclusive), the resulting string is "dcbaefd".

Example 2:

Input: word = "xyxzxe", ch = "z"

Output: "zxyxxe"

Explanation: The first and only occurrence of "z" is at index 3. Reverse the part of word from 0 to 3 (inclusive), the resulting string is "zxyxxe".

Example 3:

Input: word = "abcd", ch = "z"

Output: "abcd"

Explanation: "z" does not exist in word. You should not do any reverse operation, the resulting string is "abcd".

Constraints:

  • 1 <= word.length <= 250
  • word consists of lowercase English letters.
  • ch is a lowercase English letter.

Solution

In this case, we first need to find index position of character ch and then we can reverse the initial part of the string from index 0 to index position of character and append the remaining part as it is. We can use array to accomplish this easily.

 1class Solution {
 2    public String reversePrefix(String word, char ch) {
 3        int index = -1;
 4        for (int i = 0; i < word.length(); i++) {
 5            if (word.charAt(i) == ch) {
 6                return reverseSubstring(word, 0, i);
 7            }
 8        }
 9        return word;
10    }
11
12    private String reverseSubstring(String word, int start, int end) {
13        char[] chars = word.toCharArray();
14        while (start < end) {
15            char temp = chars[start];
16            chars[start++] = chars[end];
17            chars[end--] = temp;
18        }
19        return new String(chars);
20    }
21}