快手面试:反转字符串

快手测开校招(一面凉经)
一共50分钟, 20分钟让我写代码
首先是问项目经历,然后问项目中遇到的问题,技术手段
测试一下登录注册功能,代码逻辑
然后问SQL平均分
写字符串反转代码,自己写的代码如何测试写的代码如何优化

最后反问

题目:反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = [“h”,”e”,”l”,”l”,”o”]
输出:[“o”,”l”,”l”,”e”,”h”]

示例 2:
输入:s = [“H”,”a”,”n”,”n”,”a”,”h”]
输出:[“h”,”a”,”n”,”n”,”a”,”H”]
解法一:对称交换
一、整体功能
这段代码的功能是实现对给定字节切片s中字符的反转。例如,输入[“h”,”e”,”l”,”l”,”o”],经过这个函数处理后会输出[“o”,”l”,”l”,”e”,”h”]。
二、具体实现步骤
首先,计算输入字节切片的长度并赋值给变量length。
length := len(s):通过内置的len函数获取字节切片s的长度,这一步为后续的循环和交换操作提供了依据。
然后,使用一个循环进行对称交换操作。
for i := 0; i < length/2; i++:这个循环从i = 0开始,一直到i < length/2。只需要遍历到字符串长度的一半即可,因为每次交换都是对称的,交换了一半的字符后整个字符串就被反转了。
s[i], s[length-1-i] = s[length-1-i], s[i]:这一行进行对称交换操作。它将索引为i的字符和索引为length – 1 – i的字符进行交换。例如,对于长度为 5 的字符串,当i = 0时,交换第一个字符和最后一个字符;当i = 1时,交换第二个字符和倒数第二个字符,以此类推。
golang实现
// 解法一:对称交换
func reverseString(s []byte) {
length := len(s)
for i := 0; i < length/2; i++ {
s[i], s[length-1-i] = s[length-1-i], s[i]
}
}
解法二:双指针
// 解法二:双指针
func reverseString(s []byte) {
left, right := 0, len(s)-1
// 使用两个指针进行交换
for left < right {
// 交换左右指针的元素
s[left], s[right] = s[right], s[left]
left++
right–
}
}

Java实现
public class ReverseString {
public static void reverseString(char[] s) {
int left = 0;
int right = s.length – 1;
while (left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right–;
}
}
}
PHP实现
function reverseString(&$s) {
$left = 0;
$right = count($s) – 1;
while ($left < $right) {
$temp = $s[$left];
$s[$left] = $s[$right];
$s[$right] = $temp;
$left++;
$right–;
}
}
c++实现

include

include

void reverseString(std::vector& s) {
int left = 0;
int right = s.size() – 1;
while (left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right–;
}
}
反转字符串:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnhbqj/
牛客网:https://www.nowcoder.com/feed/main/detail/1c2131b3e78a412296ea087d40d12b09

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/422823.html

(0)
联系我们
联系我们
分享本页
返回顶部