📅  最后修改于: 2023-12-03 15:05:30.560000             🧑  作者: Mango
我在 TCS Codevita 2019 面试中获得了非常好的体验。下面是我详细的介绍。
TCS Codevita 2019 的面试前,我做了大量的准备工作。我学习了算法和数据结构,并通过 LeetCode 和 Hackerrank 解决了一些难题。我还制定了一个计划,在面试前一天重新复习了所有的知识。
我抵达了面试现场,使用了他们提供的电脑。面试官告诉我,有两个问题需要解决。我得到一个终端窗口和一个文本编辑器,以便在指定的时间内解决问题。
第一个问题要求我们编写一个程序,将一个输入字符串的所有字符反转,然后输出它。例如,如果输入为“Hello”,应该输出“olleH”。
我首先完成了一份详细的计划,然后开始编码。在解决该问题之前,我编写了几个帮助程序,例如一个将字符串转换为字符数组的实用程序以及一个将字符数组反转的实用程序。使用这些程序,我轻松地完成了第一个问题。
代码片段:
def reverse_string(s):
chars = list(s)
left, right = 0, len(chars) - 1
while left < right:
chars[left], chars[right] = chars[right], chars[left]
left += 1
right -= 1
return ''.join(chars)
input_str = input("Enter a string: ")
output_str = reverse_string(input_str)
print(output_str)
第二个问题要求我们在输入的字符串中查找最长的回文子字符串。例如,在字符串“babad”中,最长的回文子字符串是“bab”。
我使用了 Manacher 算法解决这个问题。我首先编写了一个将普通字符串转换为 Manacher 字符串的程序,然后找到了 Manacher 字符串的所有回文中心。最后,我从中心向左右两侧扩展,查找最长的回文。
代码片段:
def longest_palindrome(s):
if not s:
return ''
t = '^#' + '#'.join(s) + '#$'
p = [0] * len(t)
center, right = 0, 0
for i in range(1, len(t) - 1):
if right > i:
p[i] = min(right - i, p[2 * center - i])
while t[i + p[i] + 1] == t[i - p[i] - 1]:
p[i] += 1
if i + p[i] > right:
center, right = i, i + p[i]
max_len, center_idx = max((n, i) for i, n in enumerate(p))
start_idx = (center_idx - max_len) // 2
end_idx = start_idx + max_len - 1
return s[start_idx:end_idx + 1]
input_str = input("Enter a string: ")
output_str = longest_palindrome(input_str)
print(output_str)
TCS Codevita 2019 面试提供了很好的机会,挑战自己的算法和编程技能。我热爱在这种有压力的环境下编写代码,而且有面试官在旁边解释问题和策略真的帮了很多忙。最后,我收到了面试官的积极反馈。