Leetcode秋招冲刺--(专题7-9)

专题7:字符串匹配

题目459:重复的子字符串(NO)

  • 解题思路:这里用到了substr获取子串,然后直接堆成相同大小的主串,然后进行比较。
    这题主要没做出的原因是时间复杂度一直优化不下去

  • myself

class Solution {
public:bool repeatedSubstringPattern(string s) {//直接暴力枚举每个每个子串,看是否能全部都匹配string child="";for(int i=0;i<s.size()/2;i++)//自己不能算子串{child+=s[i];//子串每次都增加一个单位std::cout<<child<<std::endl;//判断是否可以全部匹配string temp=child;string add=child;//直接先用子串堆出完整的字符串在进行判断if(s.size()%child.size()!=0){//不可能重复构成主串,继续判断下一个continue;}while(temp.size()!=s.size()){temp+=add;//如果不是子串也跳出if(s.find(temp)==string::npos){break;}}//构成主串了,进行判断if(temp==s){return true;}}return false;}
};
  • 较好的答案
class Solution {
public:bool repeatedSubstringPattern(string s) {int n = s.size();for (int len = 1; len <= n / 2; len++) {if (n % len == 0) {string sub = s.substr(0, len);//获取子串string pattern;//组合成新得主串for (int i = 0; i < n / len; i++) {pattern += sub;}//比较if (pattern == s) {return true;}}}return false;
}
};
  • substr用法介绍

string::substr 是 C++ 中 std::string 类的一个成员函数,用于提取字符串中的子串。下面是 substr 函数的通用形式:

string substr(size_t pos = 0, size_t count = npos) const;
  1. pos 参数表示要提取子串的起始位置(默认为 0)。
  2. count 参数表示要提取的字符数(默认为 npos,即直到字符串末尾)。

题目796:旋转字符串(YES)

  • 解题思路:模拟,通过(i+j%n)模运算可以模拟旋转扫描,或者直接调用库函数,这是最容易的方法。

给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。

s 的 旋转操作 就是将 s 最左边的字符移动到最右边。

例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。

class Solution {
public:bool rotateString(string s, string goal) {int m = s.size(), n = goal.size();//长度不等,怎么都无法旋转成功if (m != n) {return false;}//这是模拟的关键for (int i = 0; i < n; i++) {bool flag = true;for (int j = 0; j < n; j++) {if (s[(i + j) % n] != goal[j]) {flag = false;break;}}if (flag) {return true;}}return false;}
};
  • 方法2:调用库函数(这种面试感觉不可取)
class Solution {
public:bool rotateString(string s, string goal) {//这里运用substr选取子串会非常容易//选转几次就是将多少长度的子串移动到后面if(s==goal){return true;}for(int i=1;i<s.size();i++){string child=s.substr(0,i);//要移动到后面的子串string last=s.substr(i,s.size()-i);if(goal==last+child){return true;}}return false;}
};

题目1408:数组中字符串匹配(YES)

  • 解题思路:原本不想调库函数,但是官方题解给的也是调库,直接暴力枚举每个值,比较是不是其它字符的子串,用find(temp)!=string::npos可以快速查找子串。

给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。

如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 words[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。

  • myself
class Solution {
public:vector<string> stringMatching(vector<string>& words) {//暴力枚举vector<string>ans;//查找每个元素,看是不是别人的子串for(int i=0;i<words.size();i++){for(int j=0;j<words.size();j++){if(i==j)//与自己不比较{continue;}//检查是否是子串,掉库函数findif(words[j].find(words[i])!=string::npos){ans.push_back(words[i]);break;}}}return ans;}
};

题目1455:检查单词是否为句中其他单词的前缀(YES)

  • 解题思路:扫描整个句子,当不是空格时候,说明这是单词了,就直接开始比较前缀。

给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。

如果 searchWord 是某一个单词的前缀,则返回句子 sentence 中该单词所对应的下标(下标从 1 开始)。如果 searchWord 是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果 searchWord 不是任何单词的前缀,则返回 -1 。

字符串 s 的 前缀 是 s 的任何前导连续子字符串。

  • myself
class Solution {
public:int isPrefixOfWord(string sentence, string searchWord) {int ans=0;//遍历检查每一个单词int i=0;while(i<sentence.size()){if(sentence[i]==' '){i++;continue;}ans++;//提取单词并且进行比较int count=0;bool sign=true;while(i<sentence.size()&&count<searchWord.size()){if(sentence[i]!=searchWord[count]){sign=false;break;}i++;count++;}if(sign){return ans;}//单词比较结束,将该单词移动到空格位置while(i<sentence.size()&&sentence[i]!=' '){i++;}}return -1;}
};

题目2185:统计包含给定前缀的字符串(YES)

  • 解题思路: 这题很简单,直接枚举每个字符串比较前缀就行。

给你一个字符串数组 words 和一个字符串 pref 。

返回 words 中以 pref 作为 前缀 的字符串的数目。

字符串 s 的 前缀 就是 s 的任一前导连续字符串。

  • myself
class Solution {
public:int prefixCount(vector<string>& words, string pref) {//这个似乎更简单了,直接枚举就行int ans=0;for(int i=0;i<words.size();i++){if(pref.size()>words[i].size()){continue;}bool sign=true;for(int j=0;j<pref.size();j++){if(words[i][j]!=pref[j]){sign=false;break;}}if(sign){ans++;}}return ans;}
};

专题8:桶排序

题目164:最大间距(NO)

  • 方法1:直接sort (排序算法题直接用sort必然不可取,这不能算通过)
class Solution {
public:int maximumGap(vector<int>& nums) {if(nums.size()<2){return 0;}sort(nums.begin(),nums.end());int maxgap=0;for(int i=1;i<nums.size();i++){if(nums[i]-nums[i-1]>maxgap){maxgap=nums[i]-nums[i-1];}}return maxgap;}
};
  • 冒泡排序(这题是不适用的,时间复杂度太高,正好复习一下排序算法)
void Bubble_sort(vector<int>&nums){for(int i=0;i<nums.size()-1;i++){for(int j=0;j<nums.size()-i-1;j++){if(nums[j]>nums[j+1]){int temp=nums[j];nums[j]=nums[j+1];nums[j+1]=temp;}}}}

专题9:计数排序

题目2710:移除字符串中的尾随零(YES)

  • 解题思路:这题主要运用的还是对substr获取子串的方法,只要找出后面有几个零就可以了。

给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num 。

std::string substr(size_t pos = 0, size_t count = npos) const;
  • pos:起始位置,即子字符串的起始索引。

  • count:要提取的字符数。

  • myself

class Solution {
public:string removeTrailingZeros(string num) {//一次for从尾部开始扫描就行了int count=0;for(int i=num.size()-1;i>=0;i--){if(num[i]=='0'){count++;}else{break;}}//获取子串return num.substr(0,num.size()-count);;}
};

题目1051:高度检查器(YES)

  • 解题思路:直接使用冒泡排序,然后再进行比较就行。

学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。

排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。

给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。

返回满足 heights[i] != expected[i] 的 下标数量 。

  • myself
class Solution {
public://冒泡排序void Bubble_sort(vector<int>&expected){for(int i=0;i<expected.size()-1;i++){for(int j=0;j<expected.size()-i-1;j++){if(expected[j]>expected[j+1]){int temp=expected[j];expected[j]=expected[j+1];expected[j+1]=temp;}}}}int heightChecker(vector<int>& heights) {vector<int>expected=heights;Bubble_sort(expected);int count=0;for(int i=0;i<heights.size();i++){if(heights[i]!=expected[i]){count++;}}return count;}
};

题目1122:数组中的相对排序(NO)

  • 解题思路:sort搭配比较函数,且比较函数是lambda表达式,[&]可以捕获外部所有的变量。

给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

class Solution {
public:vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {unordered_map<int, int> rank;for (int i = 0; i < arr2.size(); ++i) {rank[arr2[i]] = i;}//[&]捕获外部所有的变量sort(arr1.begin(), arr1.end(), [&](int x, int y) {if (rank.count(x)) {//如果x存在y也存在,则下标小的放左边return rank.count(y) ? rank[x] < rank[y] : true;}else {return rank.count(y) ? false : x < y;}});return arr1;}
};
  • 代码分析
    如果arr1中的元素x在rank中存在,且元素y也在rank中存在,则比较它们在rank中的索引值,如果x的索引小于y的索引,则返回true。
    如果x存在而y不存在,则返回true。
    如果y存在而x不存在,则返回false。
    如果x和y都不存在于rank中,则比较它们的值的大小,返回x < y 的结果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定个小目标之刷LeetCode热题(41)

338. 比特位计数 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 今天看一下这道简单题&#xff0c;主要考查位运算&#xff0c;代码如下 class Solution {pu…

Vue3路由切换动画

一、安装依赖 需要安装animate.css pnpm i animate.css二、使用transition添加过渡动画 注意&#xff1a;要想使用动画&#xff0c;需要加:key <router-view v-slot"{ Component }"><Transitionappearenter-active-class"animate__animated animate__f…

moonlight+sunshine+ParsecVDisplay ipad8-windows 局域网串流

1.sunshine PC 安装 2.设置任意账户密码登录 3.setting 里 network启用UPNP IPV4IPV6 save apply 4.ParsecVDisplay虚拟显示器安装 5.ipad appstore download moonlight 6.以ipad 8 为例 2160*1620屏幕分辨率 7.ParsecVDisplay里面 custom设置2160*1620 240hz&#xff0c;…

银河麒麟V10 SP1 审计工具 auditd更新

前言 银河麒麟V10 SP1 审计工具 auditd 引发的内存占用过高&#xff0c; 内存使用率一直在 60% 以上&#xff0c; 内存一直不释放 排查 可以使用ps或者top查看系统进程使用情况 ps -aux|sort -k4nr|head -n 5 发现银河麒麟审计工具 auditd 一直占用内存不释放 解决 办法一…

vivado CLOCK_REGION、CLOCK_ROOT

时钟区域 CLOCK_REGION属性用于将时钟缓冲区分配给 UltraScale设备&#xff0c;同时让Vivado放置程序将时钟缓冲区分配给最佳站点 在该区域内。 重要提示&#xff1a;对于UltraScale设备&#xff0c;不建议将时钟缓冲区固定到特定站点&#xff0c;因为 你可以在时钟上规划一个7…

(头哥)Hive的安装与配置

第1关&#xff1a;Hive的安装与配置 wget -O - https://gitee.com/tianzhen2647/bash/raw/master/Hive%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/h1.sh | bash第2关&#xff1a;Hive Shell入门基础命令 直接修改/opt/hive/bin下的hive文件&#xff0c;把里面的…

掌握Eloquent ORM:Laravel中的对象关系映射艺术

掌握Eloquent ORM&#xff1a;Laravel中的对象关系映射艺术 在现代Web应用开发中&#xff0c;数据库的操作是核心功能之一。Laravel框架提供了一个强大而优雅的ORM&#xff08;对象关系映射&#xff09;工具——Eloquent。Eloquent让数据库操作变得简单直观&#xff0c;同时保…

进程的初步认识

目录 一、硬件方面介绍 1.冯诺依曼体系结构 2.存储分级 二、软件 方面 1.操作系统是一款进行管理的软件&#xff0c;它可以管理硬件也可以管理软件 2.操作系统如何管理&#xff1f; 三、进程 1.概念 总结 四、linux中对进程的管理 1.task_ struct内容分类 2.查看进…

现代信息检索笔记(四)——文档评分、词项权重计算及向量空间模型

目录 对搜索结果进行排序 目标 方案一&#xff1a;jaccard系数 方案二&#xff1a;tf-idf公式 长文本长度 向量空间模型小结 对搜索结果进行排序 排序式检索&#xff0c;如何高速求相关性R 目标 无关的不在上面相关度高的在前面 在链表中不出现的相关性为0&#xff0c…

PageCache页缓存

一.PageCache基本结构 1.PageCache任务 PageCache负责使用系统调用向系统申请页的内存,给CentralCache分配大块儿的内存,以及合并前后页空闲的内存,整体也是一个单例,需要加锁. PageCache桶的下标按照页号进行映射,每个桶里span的页数即为下标大小. 2.基本结构 当每个线程的…

如何使用uer做多分类任务

如何使用uer做多分类任务 语料集下载 找到这里点击即可 里面是这有json文件的 因此我们对此要做一些处理&#xff0c;将其转为tsv格式 # -*- coding: utf-8 -*- import json import csv import chardet# 检测文件编码 def detect_encoding(file_path):with open(file_path,…

Vatee万腾平台:智能生活的新选择

在科技飞速发展的今天&#xff0c;智能生活已经不再是遥不可及的梦想&#xff0c;而是逐渐渗透到我们日常生活的方方面面。Vatee万腾平台&#xff0c;作为智能科技领域的佼佼者&#xff0c;正以其创新的技术、丰富的应用场景和卓越的用户体验&#xff0c;成为智能生活的新选择&…

dc/dc_shell的keep和donot touch区别

donot touch和keep的区别 在半导体设计和综合工具中&#xff0c;donottouch 和 keep 属性通常用于指定综合和布局阶段的特定要求。sizeonly 是 keep 属性的一个可能值。以下是 donottouch 和 keep 属性以及 sizeonly 的区别和用途&#xff1a; donottouch&#xff1a; donotto…

rsync使用教程

1、rsync是什么 rsync是一个在Unix/Linux环境下常用的工具,Windows上可以通过一些替代工具或者使用Cygwin环境来实现类似的功能。Cygwin在安装过程中,选择需要安装的组件时确保选择了rsync和openssh(如果需要通过SSH连接到其他服务器进行备份)。rsync的简单使用如下: rs…

如何引流到私域最有效?

引流到私域最有效的方法通常包括以下几个策略&#xff1a; 1、内容营销&#xff1a; 优质内容创作&#xff1a;制作有价值、有吸引力的内容&#xff0c;如文章、视频、图文等&#xff0c;吸引用户关注。 SEO优化&#xff1a;通过搜索引擎优化&#xff0c;提高内容在搜索引擎…

带流水线的持续连接详解

流水线&#xff08;Pipeline&#xff09;的持续连接在网络编程中通常指的是一种能够保持连接持续开放&#xff0c;并允许多个请求在同一个连接上连续发送和接收的技术。这种技术在HTTP/1.1和其他一些网络协议中有应用&#xff0c;目的是提高网络通信效率和性能。HTTP的默认模式…

C++| STL之string

前言&#xff1a;最近在做LeetCode算法题&#xff0c;C字符串通常都是string作为输入&#xff0c;所以补充一下STL里面string。在介绍的具体使用的时候&#xff0c;会补充char字符串相关的进行对比。 string 创建大小和容量遍历字符串比较插入字符拼接字符串分配内存查找截取分…

Java 注入的几种方式

构造函数注入&#xff1a;构造函数注入是最常见的一种依赖注入方式。通过在组件的构造函数中接受依赖参数&#xff0c;并将其保存在私有字段中&#xff0c;可以实现依赖注入。这种方式简单直接&#xff0c;适用于必须的依赖和不变的依赖场景。 public class UserserviceImpl im…

vue学习笔记(购物车小案例)

用一个简单的购物车demo来回顾一下其中需要注意的细节。 先看一下最终效果 功能&#xff1a; &#xff08;1&#xff09;全选按钮和下面的商品项的选中状态同步&#xff0c;当下面的商品全部选中时&#xff0c;全选勾选&#xff0c;反之&#xff0c;则不勾选。 &#xff08…

51单片机嵌入式开发:2、STC89C52操作GPIO口LED灯

STC89C52操作GPIO口LED灯 1 芯片介绍1.1 芯片类型1.2 芯片系列说明 2 GPIO引脚寄存器说明3 GPIO操作3.1 GPIO输入3.2 GPIO输出3.3 GPIO流水灯3.4 Protues仿真 4 总结 1 芯片介绍 1.1 芯片类型 芯片采用宏晶科技品牌下的STC89C52RC单片机 选择STC89C52RC系列STC89C58RD系列单片…