算法练习day8

反转字符串

代码随想录 0344.反转字符串

344. 反转字符串 - 力扣(LeetCode)

(用时:0.05小时)

思路

这道题很简单也很经典。

字符串的反转方法有很多,我这里是用for循环通过数组长度和下标计算来交换。

写这道题时逻辑不难,后面涉及到指定区域的翻转后,脑子就跟不上了。。。后面就直接用双指针了。。

代码实现

public class ReverseString
{
    public void ReverseStringFun(char[] s)
    {
        char temp;
        for(int i=0;i<s.Length/2;i++)
        {
            temp = s[i];
            s[i] = s[s.Length-1-i];
            s[s.Length - 1 - i] = temp;
        }
    }
}

反转字符串II

代码随想录 0541.反转字符串II

541. 反转字符串 II - 力扣(LeetCode)

(用时:3小时)

思路

这道题主要是要理解题意。。

题目要求我们按2K为一组,每组的前K个元素进行翻转。

  • 这意味着一般的情况应该是K个翻转K个不翻转

  • 当元素无法达到2K时:

    若>K,则翻转K个元素 若<K,则翻转剩余所有的元素

    image-20240514104414238

错误

这道题在交换指定区域的数组元素中卡住,对自己更无语了

上一道题是用for循环,然后直接通过计算一下子秒掉了,但是这道题中,初始值和终点值有变化,写多了看多了逻辑就混乱了。。。。于是用回了while双指针。。。

代码实现

public char[] ReserseChars(int start,int end, char[] chars)
{
    char temp;
    while(start<end)
    {
        temp = chars[start];
        chars[start] = chars[end];
        chars[end] = temp;
        start++;
        end--;
    }
    return chars;
}
​
public string ReverseStr(string s, int k)
{
    char[] ans =  s.ToArray<char>();
    for (int i=0;i<s.Length;i+=2*k)
    {
        //剩余的少于k个
        if (i+k>ans.Length)
        {
            ans = ReserseChars(i, ans.Length-1, ans);
        }
        //大于k个小于2k个
        else
        {
            ans = ReserseChars(i, i + k-1, ans);
        }
    }
    return new string(ans);
}

翻转字符串里的单词

代码随想录 0151.翻转字符串里的单词

151. 反转字符串中的单词 - 力扣(LeetCode)

(用时:2小时)

思路

这道题是对字符串中的单词翻转,意思就是单词的顺序翻转,单词本身里面的字母不要翻转。

要实现有很多种方法,又看到一位大佬用了字典(键值对)。我刚开始也想着可以用分割字符串的方法。

但训练算法时还是不要用这么多库函数。卡哥也要求我们在原字符串上操作。

我们可以先将整体的字符串翻转,这样单词的顺序就达到了我们的效果。但是单词的字母也翻转了,我们逐一对单个单词再翻转一次即可。此外还要消减空格,让每个单词之间只有一个空格。

重点

个人感觉这道题主要是思路上的问题。卡哥给的思路很清晰,所以实现起来没有出什么问题。

但是自己想的时候是很混乱的,判断来判断去的。。。思路真的很重要啊!

错误

写的过程中,犯了一些错误:

  1. 去除空格和翻转单词的实现。

  2. 最终输出的字符串,后面多余了很多重复的字母们。

  3. 使用ReserseChars时数组越界

  4. 分别在去除空格和翻转单词的for循环中,while循环的条件数组越界了。

个人理解如下:

  • 去除空格和翻转单词的实现错误。

    这道题里,去除空格和翻转单词分开做比较好,这样不容易乱。

  • 最终输出的字符串,后面多余了很多重复的字母们。

    后面重复的都是新字符串中无用的空间。因为新的字符串的长度没有记录下来,导致后面翻转单词时依旧遍历原本字符串的长度,把后面多余的“垃圾”也翻转,然后输出了。

  • 使用ReserseChars时数组越界

    这是在输入begin和end的时候,fast此时在前面的while中,可能是=len了,此时ans[fast]会越界。

    而且这个单词有效的范围也是slow到fast-1,fast本身停止的条件就是当fast指向不属于该单词的范围的时候(即越界或者遇到空格的单词结束。)

  • 分别在去除空格和翻转单词的for循环中,while循环的条件数组越界了。

    这是因为在for中间,“擅自”让i/fast向前探索,只有两种情况下会让它停下来: 一是找到指定要求的地方了(比如找到不属于单词的部分了) 二是到了末尾,这个单词刚好是最后一个。

    第一种情况用ans[fast或i]!=' '既可,但第二种情况下的ans是会越界的!因此要有一个判断其是否超出范围的条件,且这个条件要放在第一个条件前判断。

代码实现

这道题是剑指Offer的题目。力扣上已经下架了,卡哥的卡玛网上没有C#的检测,也没有专门去写C++的版本。。。

public char[] ReserseChars(int start, int end, char[] chars)
{
    char temp;
    while (start < end)
    {
        temp = chars[start];
        chars[start] = chars[end];
        chars[end] = temp;
        start++;
        end--;
    }
    return chars;
}
​
​
public string Reserse(string s,int k)
{
    char[] ans = ReserseChars(0, s.Length - 1, s.ToArray<char>());
​
    ans = ReserseChars(0, k-1, ans);
    ans = ReserseChars(k - 1, s.Length - 1, ans);
​
    return new string(ans);
}

替换数字(空格)

代码随想录 0054.替换数字

(用时:1小时)

这道题没有对字符串的翻转操作了,本题主要考察的是插入删除(个人感觉)。

C#中对string的扩张不用库函数太麻烦了,因此就不写卡哥教的双指针的方法了,实现用了库函数。卡哥的方法有分析了一下,接下来二刷试试用C++实现吧。

代码实现

public string Replace(string s)
{
    string number = "number";
    int index = 0;
​
    while(index<s.Length)
    {
        if (s[index]>='0' && s[index]<='9')
        {
            s = s.Remove(index, 1);
            s = s.Insert(index, number);
        }
        index++;
    }
    return s;
}

右旋字符串

代码随想录 0055.右旋字符串

(用时:1小时)

只能说太牛了卡哥的思路!写完上一题过来还是没有想到这个想法:整体翻转+局部翻转

思路和翻转单词那里一样。

同样也是剑指Offer。

代码实现

public char[] ReserseChars(int start, int end, char[] chars)
{
    char temp;
    while (start < end)
    {
        temp = chars[start];
        chars[start] = chars[end];
        chars[end] = temp;
        start++;
        end--;
    }
    return chars;
}
​
​
public string Reserse(string s,int k)
{
    char[] ans = ReserseChars(0, s.Length - 1, s.ToArray<char>());
​
    ans = ReserseChars(0, k-1, ans);
    ans = ReserseChars(k - 1, s.Length - 1, ans);
​
    return new string(ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/625759.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.2.3" 在Rust代码中使用它&#xff1a; extern crat…

pip镜像源

1.1 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 1.2 阿里云 https://mirrors.aliyun.com/pypi/simple/ 1.3 网易 https://mirrors.163.com/pypi/simple/ 1.4 豆瓣 https://pypi.douban.com/simple/ 1.5 百度云 https://mirror.baidu.com/pypi/simple/ 1.6 中科大 ht…

Android 集成Bugly完成线上的异常Exception收集及处理

文章目录 &#xff08;一&#xff09;添加产品APP&#xff08;二&#xff09;集成SDK&#xff08;三&#xff09;参数配置权限混淆 &#xff08;四&#xff09;初始化 &#xff08;一&#xff09;添加产品APP 一&#xff09;在个人头像 -> 我的头像 -> 新建产品 二&…

基于IDEA快速创建一个SpringMVC项目并且配置Tomcat

1&#xff0c;打开IDEA&#xff0c;新建Maven项目【使用web模板创建】 使用社区版的同学创建普通的maven项目&#xff0c;并配置项目的webapp&#xff0c;详情可参考 快速创建一个SpringMVC项目&#xff08;IDEA&#xff09; 2&#xff0c;在main目录下创建Java和resource目录…

原生小程序开发如何使用 tailwindcss

原生小程序开发如何使用 tailwindcss 原生小程序开发如何使用 tailwindcss 前言什么是 weapp-tailwindcss ?0. 准备环境以及小程序项目1. 安装与配置 tailwindcss 0. 使用包管理器安装 tailwindcss1. 在项目目录下创建 postcss.config.js 并注册 tailwindcss2. 配置 tailwind…

24深圳杯B题42页高质量论文+可执行代码+可视化图标(更新版)

简单麦麦https://www.jdmm.cc/file/2710640/ 比赛题目的完整版思路代码数据都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff…

灌区信息化管理平台系统包含哪些内容?(全面介绍)

政策背景 2022年12月29日&#xff0c;水利部启动48处大中型灌区开展数字孪生灌区先行先试建设。 2023年2月24日&#xff0c;《2023年农村水利水电工作要点》:2023年农村水利水电工作的总体思路包括:紧盯保障国家粮食安全&#xff0c;加快推进大中型灌区现代化改造&#xff0c;…

1. AB路线-BFS+分层图

0AB路线 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> #define int long long #define endl \n using namespace std; int n,m,k; //存迷宫格子 char board[1005][1005]; //vis[i][j][k]存坐标(i,j)的格子&#xff0c;在一个周期中第k次经过它 bool vis[1005][1005][…

linux 网络管理 实验

目录 网络管理主机名管理网络管理 网络管理 主机名管理 执行如下命令查看主机名。 [rootopenEuler ~]# hostname openEuler [rootopenEuler ~]# cat /etc/hostname #这个文件是主机名的配置文件 openEuler执行如下命令临时修改主机名。 [rootopenEuler ~]# hostname huawe…

(四十二)第 6 章 树和二叉树(树的二叉链表(孩子-兄弟)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

MySQL的msi格式安装

一、下载链接 MySQL :: Download MySQL Installer (Archived Versions) 二、安装步骤 ①选择自定义安装 ②选择要安装的产品 ③安装依赖环境 ④安装 ⑤点击下一步 ⑥配置 ⑦设置密码 ⑧命名 ⑨数据存放路径 ⑩安装配置 ①①配置环境变量 ①②验证 方法一&#xff1a; 方法二…

【软考】设计模式之桥接模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.将抽象部分与其实现部分分离&#xff0c;使它们都可以独立地变化。2.桥接模式&#xff08;Bridge Pattern&#xff09;属于对象结构型模式&#xff0c;又称为柄体&#xff08;Handle an…

C#中json数据序列化和反序列化的最简单方法(C#对象和字符串的相互转换)

文章目录 将C#对象转换为json字符串Newtonsoft模块的安装用Newtonsoft将对象转换为json字符串 将json字符串转换为C#对象 将C#对象转换为json字符串 本介绍将基于C#中的第三方库Newtonsoft进行&#xff0c;因此将分为Newtonsoft模块的安装和使用两部分。该模块的优势在于只需要…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100&#xff05; 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bo…

node安装以及node的包管理工具

node安装以及node的包管理工具 node安装nvm管理工具 node安装 1、下载node链接: 点击这里 2、选择需要下载的版本以及对应的系统版本 nvm管理工具 1、下载nvm链接: 点击这里 2、双击运行.exe文件 全部默认安装即可 3、nvm常用命令 nvm list avaliable 显示所有可以下载的n…

umi项目配置之项目构建时配置umirc.ts

对于 umi 中能使用的自定义配置&#xff0c;你可以使用项目根目录的 .umirc.ts 文件或者 config/config.ts&#xff0c;值得注意的是这两个文件功能一致&#xff0c;仅仅是存在目录不同&#xff0c;2 选 1 &#xff0c;.umirc.ts 文件优先级较高 umi 的配置文件是一个正常的 n…

ACM实训冲刺第七天

【碎碎念】今天开始做第2套的习题 Anton and Danik 问题 安东喜欢下棋&#xff0c;他的朋友丹尼克也喜欢下棋。 一旦他们连续玩了n局。每场比赛都知道谁是赢家——安东还是丹尼尔。没有一场比赛以平局结束。 现在安东想知道&#xff0c;谁赢了更多的比赛&#xff0c;他还是丹…

【数据可视化01】matplotlib实例介绍4之六边形分箱图

目录 一、引言二、实例介绍 一、引言 hexbin是一个二维直方图&#xff0c;其中箱子是六边形&#xff0c;颜色表示每个箱子内的数据点数。 二、实例介绍 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…

jmeter中java请求,解决不支持协议和元件,实现自定义元件

目录 java请求 作用场景 JavaTest类源码分析 编写java请求样例 新建java工程&#xff0c;导入jmeter主要依赖。 编写java请求类&#xff0c;继承AbstractJavaSamplerClient, 导入工程为jar包&#xff0c;放置jmeter安装目录下lib/ext目录 重启jmeter&#xff0c;添加ja…

Notepad8.1.9汉化中文版

下载地址&#xff1a;Notepad8.1.9.zip 一款优秀免费的源代码编辑器&#xff0c;支持语法高亮的开源纯文本编辑器&#xff0c;并且可以替代系统自带的记事本的功能。