首页 > 其他分享 >坏掉的键盘

坏掉的键盘

时间:2023-09-16 10:04:12浏览次数:30  
标签:字符 坏掉 主串 int str2 str1 st 键盘

坏掉的键盘

1. 题目地址

    https://www.acwing.com/video/1234/

2. 题目解析

    这题有两种解决方案:
        1.  打表
        2.  双指针

3. 题解

img

    上图代表双指针的解法:i代表主串指针,j代表子串指针。在遍历主串的过程中:如果二者相等,都往下走一次。如果二者不等,代表该字符已经缺失。此时应该输出,并且将主串指针往下移动即可。
    这里需要注意:上述做法会出现:主串没有遍历完,而子串已经遍历完的情况。因此,我们要将子串的最后加上一个没有出现过的字符。(主要处理在最后的地方出现字符缺失的情况)。
    由于这道题输出的是大写字符,因此我们可以将字符进行统一(大写)。而且,缺失的字符只需出现一次。因此,我们还需要一个数组,表示该字符是否已经输出过。
    如果采用打表的话,我们可以使用一个数组,存储主串中出现过的字符(标记为1)。存储之后,再遍历子串,存储在子串中出现过的字符。(标记为2)。因此,该数组中:2代表没有缺失的字符,1代表缺失的字符。之后,再遍历主串,按照顺序将标记为1的字符输出即可。(需要注意:统一大写,是否已经输出过)

4. 代码

//双指针
#include <iostream>
#include <cstdio>

using namespace std;

bool st[256];


int main(){
    
    string str1,str2;
    cin >> str1 >> str2;
    
    //添加没有出现过的字符
    str2 += '#';
    
    for(int i = 0, j = 0;i < str1.size();i ++){
        //统一:需要将其转换成大写
        char x = toupper(str1[i]);
        char y = toupper(str2[j]);
        //代表未缺失
        if(x == y){
            j++;
        }else{
            //已缺失
            //如果该字符没有输出过
            if(!st[x]){
                st[x] = true;
                printf("%c",x);
            }
        }
    }
    
    return 0;
}
//打表
#include <iostream>
#include <cstdio>

using namespace std;

//打表:用于存储字符
int table[256];
//打表:用于存储该字符是否已经输出过
bool st[256];

//用于将小写字母转换成大写字母
char to_lower(int c){
    if(c >= 'a' && c <= 'z'){
        return c - 32;
    }
    return c;
}

int main(){
    string str1,str2;
    cin >> str1 >> str2;
    for(int i = 0; i < str1.size(); i ++){
        table[str1[i]] = 1;
    }
    for(int i = 0; i < str2.size(); i ++){
        table[str2[i]] = 2;
    }
    for(int i = 0; i < str1.size(); i ++){
        if(table[str1[i]] == 1 && !st[to_lower(str1[i])]){
            st[to_lower(str1[i])] = true;
            printf("%c",to_lower(str1[i]));
        }
    }
    
    return 0;
}

标签:字符,坏掉,主串,int,str2,str1,st,键盘
From: https://www.cnblogs.com/gao79135/p/17706310.html

相关文章

  • 录入键盘输入的数据
    packageshashasha;importjava.util.Scanner;publicclasssi{publicstaticvoidmain(String[]args){//抄写代码:得到一个键盘扫描器对象(东西)Scannersc=newScanner(System.in);//开始:调用sc功能,来接受用户键盘输入的数据System.out.p......
  • 解决uni-app 输入框,键盘弹起时页面整体上移问题
    解决uni-app输入框,键盘弹起时页面整体上移问题我们每次在做UNIAPP小程序和H5遇到输入框时,总会在测试的时候点击输入框弹出软键盘把页面往上移动,仔细翻读uniapp文档的时候发现了一个属性adjust-position:Boolean类型,作用是键盘弹起时,是否自动上推页面1.发现将adjust-position属......
  • Android软键盘弹出关闭监听
    https://juejin.cn/post/6844903489051557902?from=singlemessage&isappinstalled=0#commentpackagecom.xiucai.common.manager;importandroid.graphics.Rect;importandroid.util.Log;importandroid.view.View;importandroid.view.ViewTreeObserver;import......
  • WPF 获取键盘点击值、组合键方式
    在xmal.cs文件中实现,或者重写OnPreviewKeyDown()方法:stringcodeValue="";intInputCount=0;protectedoverridevoidOnPreviewKeyDown(KeyEventArgse){intkeyValue=Convert.ToInt32(e.Key);if(keyValue==156)keyValue=Convert.ToInt32(e.......
  • Windows 禁用笔记本键盘
    背景笔记本键盘+机械键盘组合如下图:由此产生一个问题:笔记本键盘现在的用处是什么?没什么用,那我们何不把桌面的位置利用起来?......
  • selenium 模拟键盘操作
    模拟键盘操作之前介绍过,可以通过send_keys()方法用来模拟键盘输入,除此之外,还可以用它来输入键盘上的按键以及组合键。使用前,需要先导入keys类fromselenium.webdriver.common.keysimportKeyssend_keys()方法用来模拟键盘输入,常用的键盘操作:send_keys(Keys.BACK_SPACE)......
  • RK987A 机械键盘使用说明
    RK987A机械键盘快捷键有线/无线模式切换:FN+Tab蓝牙配对首先将背部开关拨到“ON”状态,然后再按FN+Tab切换到蓝牙模式,此时再长按FN+Q3秒进入配对状态。(Q键会持续闪烁)......
  • 电脑键盘上的快捷键
    电脑键盘上的快捷键ctrl+c:复制ctrl+v:粘贴ctrl+A:全选ctrl+x:剪切ctrl+Z:撤销ctrl+S:保存Alt+F4:关闭窗口cmd打开cmd的方式开始+系统+命令提示符Win键+R输入cmd打开控制台(推荐使用)在任意的文件夹下面,摁住shift键+鼠标右键点击,在此处打开命令窗口......
  • 1775_树莓派3B键盘映射错误解决
    全部学习汇总:GitHub-GreyZhang/little_bits_of_raspberry_pi:myhackingtripaboutraspberrypi.入手树莓派3B之后用了没有多长时间,最初的这段时间感觉想让它代替我的PC机是不肯能的。性能先不说,我完全没有找到当初在我的笔记本上使用Linux的感觉。再加上各种各样的问题,这让......
  • 直播软件开发,点击屏幕隐藏键盘的正确写法
    直播软件开发,点击屏幕隐藏键盘的正确写法方法一: -(void)touchesBegan:(NSSet<UITouch*>*)toucheswithEvent:(UIEvent*)event{  [self.viewendEditing:YES];}​方法二: -(void)touchesEnded:(NSSet*)toucheswithEvent:(UIEvent*)event{  [self.userName......