2Sum Problem

Problem

Given a 0-indexed string word and a character chreverse 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

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".

Solution

For this solution, we can either do the manipulations ourselves, OR use built-in functions.

Here is video explanation:

Method 1 : Using 2 Pointers

The first approach uses 2 pointers mainly to reverse the string.

public String reversePrefix(String word, char ch) {
	char[] arr = word.toCharArray();
	int idx = -1;
	for(int i = 0; i < arr.length; i++) {
		if (arr[i] == ch) {
			idx = i;
			break;
		}
	}
	if (idx == -1) {
		return word;
	}
	int l = 0, r = idx;
	while (l < r) {
		char temp = arr[l];
		arr[l] = arr[r];
		arr[r] = temp;
		l++; 
		r--;
	}
	return new String(arr);
}

Method 2 - Using built-in functions

We can use substring and reverse functions to do it automatically.

public String reversePrefix(String word, char ch) {
	int idx = word.indexOf(ch);
	if (idx == -1) {
		return word;
	}
	return new StringBuilder(word.substring(0, idx+1)).reverse().toString() + word.substring(idx+1);
}