首页 > 其他分享 >L1-011记录

L1-011记录

时间:2023-10-19 21:22:47浏览次数:34  
标签:遍历 记录 int 位置 空格 011 book L1 字符串

关于这道题目,今天其实有自己的一些思路 

L1-011 A-B 分数 20 作者 陈越 单位 浙江大学

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A−B的结果字符串。

输入样例:

I love GPLT!  It's a fun game!
aeiou

输出样例:

I lv GPLT!  It's  fn gm!

不得不说,这位陈越老师的题目总是很 emm ***钻,而且很多都是看上去简单实际上技巧性强的很,关于这道题目,看到第一眼的想法是这样的
输入A/B两个字符串,遍历A,记录空格的位置在C,如果存在空格就把对应位置赋值为1,然后比较AB,如果相等就直接删除对应的位置,用双循环解决,但是这样做存在了一个问题
即 当我删除了对应的字符之后,会留下空格,因为我是直接把A的对应位置赋值为了空格,然后试图通过C的记录还原原本的字符串,但是这样做似乎并不行,还原的字符串格式与原本的不同
解决许久无果,因此转而看了大佬的代码,不得不让我感叹,大佬就是大佬
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string a, s;
    getline(cin, a);
    getline(cin, s);
    int book[256];
    for (int i = 0; i < s.length(); i++)
    {
        book[s[i]] = 1;
    }
    for (int j = 0; j < a.length(); j++)
    {
        if (book[a[j]] == 1)
        {
            continue;
        }
        cout << a[j];
    }


}

这段代码的思路为,用一个book数组,先遍历要删除的字符串s,其中最精髓的是book[s[i]]这个式子,解释一下就是,假设我输入了aeiou,那么对于s[0]就是a

book[a]就是book[97],也就是说在这个位置标记为了1,这就相当于标记了a这个字母,然后在第二个循环中遍历,遍历原本的字符串a的时候,假设遇到了和s[0]一样的字母a,假设是 a[0],那么

book[a[0]]也是book[97],就会执行continue直接跳过,这样说可能不清楚,具体来说

I love GPLT! 

aeiou

先访问 I,发现book[a[0]] = book[a[I]],这个位置上是0,那么就会输出,然后访问空格,发现空格对应的位置也是0,输出,直到o,发现book[a[3]]=book[o]这个位置上是1

那么continue跳过,继续查找,这样做的好处是不需要再考虑空格的问题,因为空格压根没有被标记,原本在什么位置就会在什么位置输出

 

不得不感叹 大佬的思路又快又有效 自己还是个小菜鸡 要走的路还很远啊




标签:遍历,记录,int,位置,空格,011,book,L1,字符串
From: https://www.cnblogs.com/Arkiya/p/17775678.html

相关文章

  • 【Django | 开发】中间件配置(记录响应耗时日志)
    ......
  • 开源版本Disruptor代码解读记录
    01disruptor实现原理disruptor是一种基于共享内存的进程间通信方式;接下来我们对该开源代码进行解读环形队列设计原理使用环形队列,实际上就是在堆上申请的一个大小为cap的数组,要求队列大小为2的N次方,为了满足位运算,快速计算出索引index(比取模的速度快)。对该数组的访问将由2个索......
  • 计算机基础知识记录(1)
    十进制转换二进制:(要注意正数和小数的区别)正数:数字除以2然后继续将商除以2,将余数按照逆序排列即可得到二进制数;例如:28转换为2进制数,28÷2=14,余0;14÷2=7,余0;7÷2=3,余1;3÷2=1,余1;1÷2=0,余1。最后,逆序排列余数即可得到28的二进制表示,即11100。小数部分:乘以2取正数部分,再按......
  • rocketmq记录
    Rocketmq 生产者、消费者maven引用<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.7.0</version></dependency><!--一个好用的工具包,可以不引入--><dependency><groupI......
  • 记录--如何判断两个数组的内容是否相等
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助题目给定两个数组,判断两数组内容是否相等。不使用排序不考虑元素位置例:[1,2,3]和[1,3,2]//true[1,2,3]和[1,2,4]//false思考几秒:有了......
  • 博客成立啦!亲爱的小博,以后将会和你共同记录下我的成长路上的点点滴滴!加油!
    大学中的第一篇博客来啦~初秋的落叶承载了新一轮的悲欢离合,校园的晚霞昭示着再一次的轻装上阵,或许像那句话所说“我们出发,皆因我们相信,也因我们可以”。我们相信前路坎坷但意义非凡,勇敢向前不惧阻挠。我们可以迎接挑战并全力以赴,不负韶华再赴前章。夏末不能仅仅停留在遗憾的书......
  • jemeter使用jp@gc - PerfMon Metrics Collector性能监控startAgent2.2.1版本崩溃记录
    jemeter进行性能测试时,一开启startAgent就退出,以下是正常情况:原因:JDK版本与startAgent版本不对应解决方式:之前使用的是jdk1.8.0_321,更换为jdk1.8.0_141后就正常了 ......
  • Git的状态记录
    Gitdiff-files下A:添加文件C:将文件复制到新文件中D:删除文件M:修改文件的内容或模式R:重命名文件T:文件类型的更改(常规文件、符号链接或子模块)U:文件未合并(必须先完成合并,然后才能提交)X:“未知”更改类型(很可能是错误,请报告)参考:Git-git-diff-filesDocumentation(......
  • (华为欧拉操作系统)openEuler 22.03 LTS SP2 安装使用记录
    本来是准备在虚拟机中安装rockylinux,,结果安装失败,你可以从第4步开始看。1.到 https://www.virtualbox.org/ 下载VirtualBox-7.0.12-159484-Win.exe  并安装 2.到 https://rockylinux.org/zh_CN/download/下载   Rocky-9.2-x86_64-dvd.iso 由于这个iso有8.8G,正......
  • 记录最近学习到的一些windows常用命令
    1、ping命令可以用来测试网络是否联通,使用步骤如下:1.1、在电脑上面同时按住win+R,输入cmd,回车 1.2、在窗口里面输入一行格式为“ping+空格+IP地址(或者网站地址)”的命令,如“pingwww.baidu.com” 如上图可见,本台计算机可以与百度通信2、cd命令cd命令可以更改命令提......