【LeetCode】反转字符串
欢迎来到李耶的频道【LeetCode面试题】。反转字符串题目编写一个函数其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。输入s [h,e,l,l,o] 输出[o,l,l,e,h]输入s [H,a,n,n,a,h] 输出[h,a,n,n,a,H]解法一双指针思路使用左右两个指针分别指向数组的头和尾。交换两个指针指向的元素然后左指针右移右指针左移直到两个指针相遇。这是最经典、最高效的原地反转解法。functionreverseString(s){letleft0;letrights.length-1;while(leftright){[s[left],s[right]][s[right],s[left]];left;right--;}returns;}时间复杂度 / 空间复杂度O(n) / O(1)优势最推荐代码简洁性能最优面试中最稳妥的写法解法二递归思路将数组的第一个和最后一个交换然后递归处理中间的子数组。functionreverseString(s){functionhelper(left,right){if(leftright)return;[s[left],s[right]][s[right],s[left]];helper(left1,right-1);}helper(0,s.length-1);returns;}时间复杂度 / 空间复杂度O(n) / O(n)优势体现递归思想但空间复杂度不满足 O(1) 要求面试中不推荐解法对比解法时间 / 空间复杂度原地修改推荐指数双指针O(n) / O(1)✅⭐⭐⭐⭐⭐递归O(n) / O(n)✅⭐⭐⭐扩展题反转字符串 II给定一个字符串s和一个整数k从开头起每隔2k个字符反转前k个字符。反转字符串中的单词 III给定一个字符串s反转每个单词的字符顺序同时保留空格和单词顺序。反转单词前缀给定字符串word和字符ch找出ch第一次出现的下标i反转从 0 到i的字符。“世上无难事只要肯登攀。” —— 毛泽东关注李耶每天一道面试题一起卷起来