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].
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ S : inout String) -> Int {
var tempLeft = ""
var tempRight = String(S.reversed())
for (idx, i) in S.enumerated() {
tempRight.popLast()
if tempLeft == tempRight {
return idx
}
tempLeft += String(i)
}
return -1
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ S : inout String) -> Int {
var tempLeft = ""
var tempRight = String(S.reversed())
for (idx, i) in S.enumerated() {
tempRight.popLast()
if tempLeft == tempRight {
return idx
}
tempLeft += String(i)
}
return -1
}
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ S : inout String) -> Int {
var tempLeft = ""
var tempRight = String(S.reversed())
for (idx, i) in S.enumerated() {
tempRight.popLast()
if tempLeft == tempRight {
return idx
}
tempLeft += String(i)
}
return -1
}
The following issues have been detected: timeout errors.
nonsymmetric string, N = 100k+ + [aba]
running time: 1.232 sec., time limit: 0.100 sec.
symmetric string, N=100k
running time: 0.612 sec., time limit: 0.100 sec.
symmetric string, N=200k
running time: 2.368 sec., time limit: 0.128 sec.
nonsymmetric string, N = ~1M
Killed. Hard limit reached: 6.000 sec.