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

经典算法实例:旋转字符串(二)

接上文,我们继续来分享第二种解题思路:

方法二:搜索子字符串

思路和算法

首先,如果 s 和 goal 的长度不一样,那么无论怎么旋转,s 都不能得到 goal ,返回 false 。字符串 s+s 包含了所有 s 可以通过旋转操作得到的字符串,只需要检查 goal 是否为 s+s 的子字符串即可。具体可以参考「28. 实现 strStr() 的官方题解」的实现代码,本题解中采用直接调用库函数的方法

代码

Python3

class Solution: def rotateString(self, s: str, goal: str) -> bool: return len(s) == len(goal) and goal in s + s

Java

class Solution { public boolean rotateString(String s, String goal) { return s.length() == goal.length() && (s + s).contains(goal); } }

C#

public class Solution { public bool RotateString(string s, string goal) { return s.Length == goal.Length && (s + s).Contains(goal); } }

C++

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

C

bool rotateString(char * s, char * goal){ int m = strlen(s), n = strlen(goal); if (m != n) { return false; } char * str = (char *)malloc(sizeof(char) * (m + n + 1)); sprintf(str, "%s%s", goal, goal); return strstr(str, s) != NULL; }

JavaScript

var rotateString = function(s, goal) { return s.length === goal.length && (s + s).indexOf(goal) !== -1; };

Golang

func rotateString(s, goal string) bool { return len(s) == len(goal) && strings.Contains(s+s, goal) }

复杂度分析

时间复杂度:O(n) ,其中 n 是字符串 s 的长度。KMP 算法搜索子字符串的时间复杂度为 O(n) ,其他搜索子字符串的方法会略有差异。

空间复杂度:O(n) ,其中 n 是字符串 s 的长度。KMP 算法搜索子字符串的空间复杂度为 O(n) ,其他搜索子字符串的方法会略有差异。


http://www.jsqmd.com/news/1195617/

相关文章:

  • 提升效率必读:推荐一本真正改变时间观念的时间管理书籍
  • 系统运维排查工具“师傅”实战指南:从问题解决到思维提升
  • 抖音弹幕实时监控:5分钟轻松配置弹幕数据抓取方案
  • 基于DepGraph的结构化剪枝:重塑深度神经网络压缩的技术范式
  • function calling 和 MCP 的关系 就相当于 rag 和 微调 的关系
  • AMD Ryzen AI软件:3步让你的电脑变身AI工作站
  • 从零构建文本隐形水印:一种基于Unicode零宽度字符的隐写实践
  • Mac mini外置NVMe存储方案:雷电接口性能优化与实战配置
  • [Android] 安卓铃声专家-海量铃声+高清壁纸
  • 赋能企业信息聚合:构建自动化数字资产侦察平台
  • OWASP Cheat Sheet Series:从安全漏洞到系统化防御的工程实践指南
  • 如何快速部署uos-syslog-ng-exporter:从零开始构建完整的日志监控系统
  • 用 AI Skill 封装你的工作流:从代码规范到全流程提效实战
  • [Dify实战] 多轮状态不是功能点,而是系统设计题:该怎么拆才不会越做越乱?
  • 基于Spring Boot与Vue的智能监控系统:从实时数据处理到威胁分析实战
  • 一个藏在微信里的“全能地理工具箱”——佳心查经纬度海拔,到底有多实用?
  • 面试题:Redis为什么选择单线程做核心处理
  • 深度解析eino框架ChatModel推理内容支持:构建可解释AI应用的技术实践
  • HAL库 串口空闲中断+DMA接收不定长数据 实战避坑与配置精讲
  • 小米智能音箱Pro评测:高音质智能蓝牙音箱的实用指南
  • Czkawka与Krokiet:基于Rust的磁盘清理终极解决方案技术深度解析
  • 大气层Atmosphere:解锁Nintendo Switch隐藏潜能的终极实战手册
  • Kubernetes 系列【18】服务:基于 DNS 的服务发现机制
  • 收到 26-cv-5288 传票怎么办?聊聊插画版权 TRO 和解、店铺解冻实操经验
  • 从DES到AES与RSA:现代密码学核心算法原理与实战应用
  • C++性能优化:从计算机行为到代码实践,掌握缓存、分支预测与编译器协作
  • centOS7上安装docker
  • 小米笔记本Pro黑苹果安装与优化完整指南:从零到完美的深度教程
  • [数据可视化] 做企业报表时,最容易被低估的不是图表,而是数据集建模顺序?
  • 别卷 Agent 架构了:大模型上线前的生死线是权限与日志