Write a function:
class Solution { public int solution(String S); }
that, given a string S, returns the index (counting from 0) of a character such that the part of the string to the left of that character is a reversal of the part of the string to its right. The function should return −1 if no such index exists.
Note: reversing an empty string (i.e. a string whose length is zero) gives an empty string.
For example, given a string:
"racecar"
the function should return 3, because the substring to the left of the character "e" at index 3 is "rac", and the one to the right is "car".
Given a string:
"x"
the function should return 0, because both substrings are empty.
Write an efficient algorithm for the following assumptions:
- the length of string S is within the range [0..2,000,000].
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String S) {
if (S.length() == 1) {
return 0;
} else if (S.length() % 2 == 0) {
// 길이가 짝수면 대칭 불가
return -1;
}
int symIdx = S.length()/2;
for (int i = 0; i<symIdx; i++) {
char leftChar = S.charAt(i);
char rightChar = S.charAt(S.length()-i-1);
if (leftChar != rightChar) {
return -1;
}
}
return symIdx;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String S) {
if (S.length() == 1) {
return 0;
} else if (S.length() % 2 == 0) {
// 길이가 짝수면 대칭 불가
return -1;
}
int symIdx = S.length()/2;
for (int i = 0; i<symIdx; i++) {
char leftChar = S.charAt(i);
char rightChar = S.charAt(S.length()-i-1);
if (leftChar != rightChar) {
return -1;
}
}
return symIdx;
}
}
['racecar']
['abcddcba']
['x']
['']
['fdsafdsadd']
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String S) {
if (S.length() == 1) {
return 0;
} else if (S.length() % 2 == 0) {
// 길이가 짝수면 대칭 불가
return -1;
}
int symIdx = S.length()/2;
for (int i = 0; i<symIdx; i++) {
char leftChar = S.charAt(i);
char rightChar = S.charAt(S.length()-i-1);
if (leftChar != rightChar) {
return -1;
}
}
return symIdx;
}
}
['racecar']
['abcddcba']
['x']
['']
['fdsafdsadd']
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(String S) {
if (S.length() == 1) {
return 0;
} else if (S.length() % 2 == 0) {
// 길이가 짝수면 대칭 불가
return -1;
}
int symIdx = S.length()/2;
for (int i = 0; i<symIdx; i++) {
char leftChar = S.charAt(i);
char rightChar = S.charAt(S.length()-i-1);
if (leftChar != rightChar) {
return -1;
}
}
return symIdx;
}
}
The solution obtained perfect score.