当前位置: 首页 > news >正文

【每日挠头算法题(1)】——旋转字符串|亲密字符串

文章目录

  • 一、旋转字符串
    • 思路1
    • 思路2
  • 二、亲密字符串
    • 思路
  • 总结


一、旋转字符串

点我直达终点~

在这里插入图片描述

思路1

前提:如果s串和goal串长度不等,则goal串不可能是s串旋转得来,直接返回false;

通过观察,可以发现每旋转一次,第一个字符就会出现在最后一个字符的位置处,其余字符均往前挪动一个位置。

所以我们首先将第一个字符保存,然后挪动其他字符,再将保存的字符放到最后。

其次判断s和goal是否相等,如果不等,则继续按照上述方式旋转

注意:如果旋转s的长度次后,与goal仍然不想等,返回false

代码:

class Solution {
public:bool rotateString(string s, string goal) {if(s.size()!=goal.size())return false;for(int j = 0 ; j <s.size();++j){char ch = s[0];//旋转一遍for(int i = 1;i <s.size();++i){s[i-1] = s[i];}s[s.size()-1] = ch;if(s == goal){return true;}}//如果旋转完s.size()遍,还不是true,那就falsereturn false;}
};

时间复杂度:O(N^2) 空间复杂度:O(1)(原地旋转)

思路2

前提:如果s串和goal串长度不等,则goal串不可能是s串旋转得来,直接返回false;

一个巧妙的解法:运用如果goal串由s串旋转得来,那么goal串一定是s+s串的子串。
只需要判断goal字符串是否为s+s串的子串即可。

class Solution 
{
public:bool rotateString(string s, string goal){string ss = s+s;if(s.size() == goal.size() && ss.find(goal) != string::npos)return true;return false;}
};

时间复杂度:O(N) 空间复杂度O(N)

二、亲密字符串

点我直达终点~
在这里插入图片描述

思路

前提:如果s串和goal串长度不等,则goal串不可能是s串旋转得来,直接返回false;

对于这道题,首先遍历一遍s串,一边遍历一边与goal字符串进行对比,如果对应下标的goal串的字符和s串的对应下标的字符不相等,则记录不等的字符和下标。(s串和goal串一定只有两个不相等的字符)

找到后,如果pos1下标和pos2下标相同,说明s串和goal串一定相等。
然而这里存在两种情况,如题目描述:
情况1:ab和ab
情况2:aa和aa
此时我们不需要分情况讨论,只需要找到s字符串的任意一个字符如果出现两次及以上,则说明交换s字符串的任意两个相同的字符一定与goal字符串相等。
比如: aabab 和aabab,s字符串中的a出现了三次,b出现了两次,
那么无论怎么交换其中的a或者b,s字符串始终和goal字符串相等。

如果字符串pos1下标和pos2下标不同,则交换对应的pos1和pos2的字符,再判断是否与goal串相等即可。

详细请看代码:

class Solution {
public:bool buddyStrings(string s, string goal) {   //1.长度不等,必然不是亲密字符串if(s.size()!=goal.size())return false;char arr[2];//找第一个不相同的字符,并记录下标int i = 0;int pos1 = 0,pos2 = 0;for(; i<s.size();++i){if(s[i]!=goal[i]){arr[0] = s[i];pos1 = i;break;}}//找第二个不相同的字符for(i+=1; i<s.size();++i){if(s[i]!=goal[i]){arr[1] = s[i];pos2 = i;break;}}//  如果pos1 == pos2,说明s和goal是完全相等的两个串//此时有两种情况,如果s中有两个位置交换后还是原来的s,此时s和goal相等。//但不管是哪种情况,我们都只需要找出任意一个字符出现2次及以上就可以知道是亲密字符串if(pos1 == pos2){vector<int> count(26);for(int i = 0;i<s.size();++i){count[s[i] - 'a']++;if(count[s[i] - 'a']>=2)return true;}return false;}//此种情况不是s串和goal串相等,那么正常交换两个字符的位置然后判断是否与goal相等即可。else{swap(s[pos1],s[pos2]);if(s == goal)return true;return false;}}
};

时间复杂度:O(N); 空间复杂度O(1) 只消耗常量个空间,即26


总结

通过这两道题,学习到了旋转字符串的一般规律是转化为找子串的问题;
而亲密字符串的本质就是分情况讨论

情况1:如果s!=goal
情况2:如果s==goal

的分别处理方式。

相关文章:

【每日挠头算法题(1)】——旋转字符串|亲密字符串

文章目录 一、旋转字符串思路1思路2 二、亲密字符串思路 总结 一、旋转字符串 点我直达终点~ 思路1 前提&#xff1a;如果s串和goal串长度不等&#xff0c;则goal串不可能是s串旋转得来&#xff0c;直接返回false&#xff1b; 通过观察&#xff0c;可以发现每旋转一次&#…...

什么是 tokens,ChatGPT里面的Tokens如何计数?

什么是 tokens&#xff0c;ChatGPT里面的Tokens如何计数&#xff1f; 什么是 tokens&#xff1f; Tokens 可以被认为是词语的片段。在 API 处理提示之前&#xff0c;输入会被分解成 tokens。这些 tokens 并不会精确地在单词的开始或结束处切分 - tokens 可以包含尾随的空格甚…...

工业镜头分类、相关参数含义

一、工业镜头参数 1、焦距/后焦距 焦距是像方主面到像方焦点的距离。后焦距指光线离开镜头最后一片镜片表面到sensor感光面的距离&#xff0c;如8mm&#xff0c;16mm&#xff0c;25mm等&#xff1b; 焦距的大小决定着视角大小&#xff0c;焦距数值小&#xff0c;视角大&#…...

码蹄杯语言基础:数组(C语言)

码蹄集网站地址&#xff1a;https://www.matiji.net/exam/ojquestionlist ⭐MT1381逆序输出数组 定义一个长度为10的整型数组&#xff0c;输入10个数组元素的值&#xff0c;然后逆序输出他们 格式 输入格式&#xff1a; 输入10个数组元素的值&#xff0c;整型&#xff0c;空…...

DJ4-2 程序的装入和链接

目录 4.2.1 程序的装入 一、绝对装入方式 二 、可重定位装入方式 三、动态运行时装入方式 4.2.2 程序的链接 一、静态链接 二、装入时动态链接 三、运行时动态链接 在多道程序环境下&#xff0c;如果程序要运行&#xff0c;那么必须为之创建进程。而创建进程的第一件…...

开源项目合集....

likeshop开源商城系统&#xff0c;公众号商城、H5商城、微信小程序商城、抖音小程序商城、字节小程序商城、头条小程序商城、安卓App商城、苹果App商城代码全开源&#xff0c;免费商用。 适用场景&#xff1a;B2C商城、新零售商城、社交电商商城、分销系统商城、小程序商城、商…...

机器学习 | 降维问题

目录 一、主成分分析 二、奇异值分解 2.1 奇异值分解原理 2.2 奇异值分解实践 三、特征值与特征向量 一、主成分分析 主成分有如下特征&#xff1a; 每个主成分是原变量的线性组合&#xff1b;各个主成分之间互不相关&#xff1b;主成分按照方差贡献率从大到小依次排列&…...

Ubuntu20.04平台下使用二进制包部署MongoDB-6.0.4单实例

文章目录 1.1 准备服务器的基本信息1.2 操作系统上创建其用户1.3 部署MongoDB服务端1.4 部署MongoDB客户端1.5 部署MongoDB 27017实例1.5.1 创建相关目录1.5.2 准备配置文件1.5.3 准备启停脚本1.5.4 进行启停测试1.5.5 加入开机自启动 1.6 创建超级管理员用户1.6.1 创建本地的超…...

Snipaste工具推荐

Snipaste Snipaste 不只是截图&#xff0c;善用贴图功能将帮助你提升工作效率&#xff01; 新用户&#xff1f; 截图默认为 F1&#xff0c;贴图为 F3&#xff0c;然后请对照着 快捷键列表 按一遍&#xff0c;体会它们的用法&#xff0c;就入门啦&#xff01; 遇到了麻烦&…...

MinIO快速入门——在Linux系统上安装和启动

1、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 2、环境搭建&#…...

07.JavaWeb-Vue+elementUI

1.Vue 功能替代JavaScript和jQuery&#xff0c;基于JavaScript实现的前端框架 1.1配置Vue 1.1.1引入vue库 方法一&#xff1a;通过cdn链接引入最新版本的vue&#xff08;可能会慢些&#xff09; <head><script src"https://cdn.jsdelivr.net/npm/vue">…...

经典面试题---【第一档】

1.如果你想new一个Quene&#xff0c;你有几种方式&#xff1f;他们之间的区别是什么&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; Redis 通过一个叫做过期字典&#xff08;可以看作是 hash 表&#xff09;来保存数据过期的时间。过期字典的键指向 Redis 数据…...

欧美同学会第三届“双创”大赛——空天装备产业赛区(浙江诸暨)正式启动,开启报名通道

6月8日&#xff0c;欧美同学会第三届“双创”大赛——空天装备产业赛区&#xff08;浙江诸暨&#xff09;启动仪式暨北京推介会圆满举行。活动由欧美同学会&#xff08;中国留学人员联谊会&#xff09;主办&#xff0c;中共浙江省委统战部支持&#xff0c;浙江省欧美同学会、中…...

python3 爬虫相关学习8:python 的常见报错内容 汇总收集

目录 1 拼写错误 AttributeError: NameError: 等等 2 类型错误 TypeError: 如字符串连接错误 TypeError: can only concatenate str (not “int“) to str 3 意外缩进 IndentationError: unexpected indent 4 找不到对应模块 ModuleNotFoundError: 5 语法错误 Syntax…...

活跃主机发现技术指南

活跃主机发现技术指南 1.活跃主机发现技术简介2.基于ARP协议的活跃主机发现技术3.基于ICMP协议的活跃主机发现技术4.基于TCP协议的活跃主机发现技术5.基于UDP协议的活跃主机发现技术6.基于SCTP协议的活跃主机发现技术7.主机发现技术的分析 1.活跃主机发现技术简介 在生活中有这…...

手机抓包fiddler配置及使用教程

本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意&#xff1a;Fiddler 是以代理web服务器的形式工作的&#xff0c;它使用代理地址:127.0.0.1&#xff0c;端口:8888。当Fiddler退出的时候它会自动注销&#xff0c;这样就不会影响别的 程序。不过如果Fiddler非正常退出&…...

STM32单片机(四)第一节:OLED调试工具

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…...

自用的一些网址,码住!

京东羚珑智能抠图网站https://ling.jd.com/live/fm#all&#xff1a;主要用于商品抠图&#xff0c;而且还有多种直播背景设计&#xff0c;非常方便。国外的免费抠图网站https://www.remove.bg/zh/upload&#xff1a;有一个魔法棒的设计&#xff0c;可以自己选择抠图的范围和形状…...

银行vr元宇宙全景虚拟展馆提供更加真实、立体、高效的数字资产交易场景

为了贯彻国家普惠金融政策&#xff0c;使金融如无惠及广大群体,宇宙技术在金融行业中的应用将进一步提升金融消费体验感觉和金融管理水平。打造元宇宙金融服务平台&#xff0c;构建虚实结构的金融服务世界&#xff0c;培育和管理好数字机器人员工队伍&#xff0c;提升金融业务各…...

C++ 泛型编程 类型萃取器的运用

C 泛型编程 类型萃取器的运用 一、C类型萃取器的基本概念与应用&#xff08;Type Traits in C&#xff09;1.1 类型萃取器的定义与作用&#xff08;Definition and Role of Type Traits&#xff09;1.2 类型萃取器的分类与特性&#xff08;Classification and Characteristics …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...