首页 > 编程语言 >代码随想录算法训练营第八天(LeetCode344.反转字符串;LeetCode541.反转字符串Ⅱ;卡码网54.替换数字)

代码随想录算法训练营第八天(LeetCode344.反转字符串;LeetCode541.反转字符串Ⅱ;卡码网54.替换数字)

时间:2024-11-18 19:16:35浏览次数:3  
标签:ch 题目 start -- 反转 随想录 int 字符串

LeetCode 344. 反转字符串

题目链接: 反转字符串题目链接

思路

这道题目让我们进行字符串的反转,其实直接使用 reverse 相关的函数就可以解决问题。但是解决问题的时候,如果这道题目使用库函数就可以直接解决,就最好不要使用库函数;如果库函数只是题目中解法的一小步,那么就使用库函数。在不使用库函数的前提下,我们设置两个指针,让两个指针分别从数组两边向中间走,每次执行完交换操作后执行中间走操作。

代码

class Solution {
    public void reverseString(char[] s) {
        int l=0;
        int r=s.length-1;
        while(l<r)
        {
            char temp=s[l];
            s[l]=s[r];
            s[r]=temp;
            l++;
            r--;
        }
    }
}

LeetCode 541. 反转字符串Ⅱ

题目链接:反转字符串Ⅱ题目链接

思路

这道题目其实就是一道根据题意的模拟题。要求我们每次选取数组中前 2 k 个元素,并且反转 2 k 中的前 k 个元素。如果选取的数组元素的值<=k 个,则全部反转。那么反转元素的做法就跟前一道题目是一模一样的,我们在前一道题目的基础之上需要判断一下边界条件,即判断最后选取的元素的数量,也就是代码中的 end 的判断。

代码

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch=s.toCharArray();
        for(int i=0;i<ch.length;i+=2*k)
        {
            int start=i;
            int end=Math.min(ch.length-1,start+k-1);
            while(start<end)
            {
                char temp=ch[start];
                ch[start]=ch[end];
                ch[end]=temp;
                end--;
                start++;
            }
        }
        return new String(ch);
    }
}

卡码网 54. 替换数字

题目链接:替换数字题目链接

思路:

这道题目给定我们一个字符串,让我们将字符串中的数字全部替换成 number 这个字符,可以发现,如果我们需要进行替换的话,我们的字符串数组将会变长。所以我们的第一步是建立一个合适长度的字符串数组,然后我们从后向前使用双指针来进行替换。为什么不从前向后替换,因为从前向后替换的话,每次还需要更改数组中替换值后面的值的位置,时间复杂度为 O( n 2 n^2 n2), 而从后向前替换则不需要,时间复杂度为 O (n)。

代码:

import java.util.*;
 
public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        int len=s.length();
        for(int i=0;i<s.length();i++)
        {
            if(s.charAt(i)>='0'&& s.charAt(i)<='9')
                len+=5;
        }
        char[] ch=new char[len];
        for(int i=0;i<s.length();i++)
        {
            ch[i]=s.charAt(i);
        }
        for(int j=len-1,i=s.length()-1;i>=0;i--)
        {
            if(ch[i]>='0'&&ch[i]<='9')
            {
                ch[j--]='r';
                ch[j--]='e';
                ch[j--]='b';
                ch[j--]='m';
                ch[j--]='u';
                ch[j--]='n';
            }
            else
                ch[j--]=ch[i];
        }
        System.out.println(ch);
    }
}

标签:ch,题目,start,--,反转,随想录,int,字符串
From: https://blog.csdn.net/qq_51597940/article/details/143864764

相关文章

  • JavaScript 字符串的常用方法有哪些
    速览JavaScript字符串的常用方法包括charAt、charCodeAt、concat、indexOf、lastIndexOf、slice、substring、toLowerCase、toUpperCase、trim、replace、split、padStart、padEnd等。详答1.基本信息JavaScript中的字符串是一种原始数据类型,提供了丰富的操作方法来处......
  • 代码随想录算法训练营第六天|哈希表|LC242. 有效的字母异位词|LC349. 两个数组的交集|
    哈希表    哈希表:用来快速判断一个元素是否出现在集合里;O(1);    哈希碰撞:比如小王和小李都映射到索引下表1的位置,有2中解决办法(拉链法和线性探测法);    拉链发:通过索引找到,其实拉链发就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内......
  • 代码随想录算法训练营第四天|LC24.两两交换链表中的节点|LC19. 删除链表的倒数第 N 个
    24.两两交换链表中的节点-力扣(LeetCode)    1、需要一个虚拟节点进行帮助;    2、注意虚拟节点的连接以及变化(尝试有点困惑它的变化,后面有点理解);    3、注意后续第二组的交换时如何与第一组交换进行连接;fromtypingimportOptionalclassLis......
  • 代码随想录算法训练营第三十二天| 509. 斐波那契数 、70. 爬楼梯、746. 使用最小花费
    理论基础总结一下就是:动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。动态规划五部曲确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组509.斐波那契数1.......
  • 代码随想录算法训练营第三十三天| 62.不同路径 、63. 不同路径 II、343. 整数拆分 。c
    62.不同路径思路:按照dp五步法分析,成功AC。代码随想录classSolution{publicintuniquePaths(intm,intn){int[][]dp=newint[m+1][n+1];dp[0][1]=1;for(inti=1;i<=m;i++){for(intj=1;j<=n;j++){......
  • C#获取数字字符串数值连续字符串
    C#获取数字字符串数值连续字符串JieStr="1,4,5,7,8,9,10,13,15,17,18,19,21,22,6,7,13";JieStrArr=JieStr.Split(",");JieStrArr=JieStrArr.Distinct().ToArray();//去重Array.Sort(JieStrArr);//排序,从小到大List<string>nstr=......
  • leetcode1963. 使字符串平衡的最小交换次数
    给你一个字符串 s ,下标从0开始 ,且长度为偶数 n 。字符串 恰好 由 n/2 个开括号 '[' 和 n/2 个闭括号 ']' 组成。只有能满足下述所有条件的字符串才能称为 平衡字符串 :字符串是一个空字符串,或者字符串可以记作 AB ,其中 A 和 B 都是 平衡字符串......
  • Java 基础 - 字符串类
    字符串类重要的字符串类有String、StringBuilder、StringBuffer1、StringString是不可变类,内部是由final定义的字符数据构成。privatefinalcharvalue[];1.1String类的层次结构如下:String实现了比较接口,字符序列接口,序列化接口,具有以上接口的特性1.2重写了Obje......
  • Scala字符串练习题
    objectStringManipulationExamples{defmain(args:Array[String]):Unit={//问题1valfloatString="3.14"valfloatValue=floatString.toFloatvalbackToString=floatValue.toStringprintln(backToString)//问题2v......
  • 代码随想录:螺旋矩阵 II
    代码随想录:螺旋矩阵II题目是不难的,本质是重复多次顺时针旋转,注意边界条件。我第一次写错是二维数组的运用出了问题,vec[i][j]中,i代表行,j代表列,我的脑袋是明白的,但是在运用时,一开始二维矩阵向右遍历时,其实变的是j而非i另外注意一下二维vector的建立就行//二维vector数组本质上......