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

搜索子字符串的思路与算法分享

我们思考一个问题:

首先,如果 s 和 goal 的长度不一样,那么无论怎么旋转,s 都不能得到 goal ,返回 false 。字符串 s+s 包含了所有 s 可以通过旋转操作得到的字符串,只需要检查 goal 是否为 s+s 的子字符串即可。

代码

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.xdnf.cn/news/892225.html

相关文章:

  • 类似东郊到家app系统源码开发
  • 《神经渲染变局:高斯泼溅能否改写NeRF规则》
  • 【强化学习】——03 Model-Free RL之基于价值的强化学习
  • hbase资源和数据权限控制
  • 经典算法:回文链表
  • 开发在线问诊APP要注意什么?互联网医院系统源码、功能、合规全详解
  • MATLAB仿真:偏振光在光纤通信中的应用研究_可复现,有问题请联系博主
  • RocketMQ基础概念的理解
  • 28. Revit API:尺寸标注(Dimension)
  • C++STL-vector的使用
  • 非隔离电源方案
  • 【信息系统项目管理师-选择真题】2025上半年(第一批)综合知识答案和详解
  • 【Python训练营打卡】day44 @浙大疏锦行
  • 【PhysUnits】15.15 变量类型(variable.rs)
  • 前端没有“秦始皇“,但可以做跨端的王[特殊字符]
  • 驭码CodeRider 2.0 产品体验 — 搭建邮件服务
  • Web前端之原生表格动态复杂合并行、Vue
  • 农田水利如何「聪明」起来?Modbus转Ethernet IP破解设备互联
  • C语言| 指针在数组中的移动
  • qt ui 转python
  • 三维GIS开发cesium智慧地铁教程(3)entity实体
  • 岩石三轴试验机
  • Spring Boot-面试题(52)
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • JS深入学习 — 循环、函数、数组、字符串、Date对象,Math对象
  • 前端面试四之Fetch API同步和异步
  • c++算法学习3——深度优先搜索
  • 【java面试】框架篇
  • snprintf函数用法及注意事项详解
  • Redisson简明教程—你家的锁芯该换了