首页 > 其他分享 >leetcode 541.反转字符串||

leetcode 541.反转字符串||

时间:2024-12-27 23:28:22浏览次数:8  
标签:right int len start 541 字符串 leetcode 个字符 left

看了一圈题解,好像没有c的解法,这里简单分享一下个人的做法:

题目为:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 10
  • 接下来上代码

时间复杂度O(N)

char* reverseStr(char* s, int k) {
    int len = 0;
    
    // 计算字符串长度
    while (s[len] != '\0') {
        len++;
    }
    
    // 每 2k 个字符为一组,反转每组的前 k 个字符
    for (int start = 0; start < len; start += 2 * k) {
        int left = start;
        int right = (start + k - 1 < len) ? start + k - 1 : len - 1;
        
        // 反转当前 2k 块中的前 k 个字符
        while (left < right) {
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
    
    return s;
}

当然,也可以使用双指针来完成反转(此处不再展示代码)

个人觉得比较麻烦的就是两种情况怎么写才最简洁 

标签:right,int,len,start,541,字符串,leetcode,个字符,left
From: https://blog.csdn.net/2403_88666560/article/details/144779130

相关文章

  • leetcode 826. 安排工作以达到最大收益
    826.安排工作以达到最大收益首先是自己写的构思代码classSolution{public:intmaxProfitAssignment(vector<int>&difficulty,vector<int>&profit,vector<int>&worker){sort(worker.begin(),worker.end());intn=difficulty.siz......
  • leetcode 870. 优势洗牌
    870.优势洗牌没做出啊......
  • 【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode
    文章目录有效的数独解数独单词搜索黄金矿工不同的路径|||有效的数独递归解法思路将每个数独的格子视为一个任务,依次检查每个格子是否合法。如果当前格子中的数字违反了数独规则(在行、列或3×3小方块中重复),直接返回False。递归检查下一个格子,直到所有格子都检......
  • Leetcode刷题第一天-二分查找
    https://leetcode.cn/problems/sqrtx/?envType=problem-list-v2&envId=binary-searchclassSolution:defmySqrt(self,x:int)->int:ifx<0:returnNone#左闭右闭区间[0,x]#求算数平方根,a*a=x,所以a<=x/2#判断x/2的平方和x的大小,......
  • 【Leetcode刷题随笔】977 有序数组的平方
    1.题目描述给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]2.解题方法2.1方法一:直接排序最......
  • 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第
    如果needle不是haystack的一部分,则返回-1示例1: 输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹配。第一个匹配项的下标是0,所以返回0。示例2: 输入:haystack="leetcode",needle="leeto"输出:-1解释:"lee......
  • leetcode热题100(48. 旋转图像)简单清晰题解c++
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3......
  • 使用js写一个方法删除字符串左边(右边)的空白
    在JavaScript中,我们可以使用trimStart()和trimEnd()方法来分别删除字符串左边和右边的空白。这两个方法都是ES2019(也称为ES10)中引入的,它们分别用于去除字符串开头和结尾的空白字符。下面是一个简单的示例,展示了如何使用这两个方法:functiontrimLeft(str){returnstr.trimS......
  • js字符串截取的方法有哪些?
    在JavaScript中,有多种方法可以截取字符串。以下是一些常见的方法:substring()substring()方法返回一个字符串在开始索引到结束索引之间的一个子集,或从开始索引到字符串的末尾的一个子集。letstr='Hello,World!';letsubstr=str.substring(0,5);//返回'Hello'su......
  • Bash 将 Python 列表格式的字符串转为空格分隔字符串的 N 种方法
    MY_LIST='["item1","item2","item3"]'echo"Originallist:$MY_LIST"MY_LIST_CONVERTED=$(echo$MY_LIST|sed's/\[//g'|sed's/\]//g'|sed's/"//g'|sed's/,//......