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

旋转字符串的解题思路与算法分享

我们先来看题目描述:

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

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

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

示例 1:

输入: s = "abcde", goal = "cdeab"
输出: true

示例 2:

输入: s = "abcde", goal = "abced"
输出: false

提示:

  • 1 <= s.length, goal.length <= 100
  • s 和 goal 由小写英文字母组成

解决方案

方法一:模拟

思路和算法

首先,如果 s 和 goal 的长度不一样,那么无论怎么旋转,s 都不能得到 goal,返回 false 。在长度一样(都为 n)的前提下,假设 s 旋转 i 位,则与 goal 中的某一位字符 goal[j] 对应的原 s 中的字符应该为 s[(i + j)mod n] 在固定 i 的情况下,遍历所有 j ,若对应字符都相同,则返回 true 。否则,继续遍历其他候选的 i 。若所有的 i 都不能使 s 变成 goal ,则返回 false 。

代码

Python3

class Solution:def rotateString(self, s: str, goal: str) -> bool:m, n = len(s), len(goal)if m != n:return Falsefor i in range(n):for j in range(n):if s[(i + j) % n] != goal[j]:breakelse:return Truereturn False

Java

class Solution {public boolean rotateString(String s, String goal) {int m = s.length(), n = goal.length();if (m != n) {return false;}for (int i = 0; i < n; i++) {boolean flag = true;for (int j = 0; j < n; j++) {if (s.charAt((i + j) % n) != goal.charAt(j)) {flag = false;break;}}if (flag) {return true;}}return false;}
}

 好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!

相关文章:

  • 二叉树-104.二叉树的最大深度-力扣(LeetCode)
  • Linux 下生成动态库时 -fPIC的作用详解
  • SpringBoot(八) --- SpringBoot原理
  • 电工基础【7】往返运动控制、星三角形降压启动
  • 深度学习N2周:构建词典
  • 【LeetCode】1061. 按字典序排列最小的等效字符串(并查集)
  • Qt 按钮类控件(Push Button 与 Radio Button)(1)
  • SLG游戏分析
  • opencv学习笔记1:图像基础、图像操作、直方图均衡化详解
  • python打卡训练营打卡记录day45
  • 【C++高阶二】STL的map和set
  • rapidocr 3.0 在线demo来了
  • 插入排序,二分查找,字符数组 day8
  • 如何配置Git LFS?
  • [蓝桥杯]倍数问题
  • ZooKeeper 安装教程(Windows + Linux 双平台)
  • 26考研 | 王道 | 计算机组成原理 | 三、存储系统
  • [蓝桥杯]堆的计数
  • 2023年全国研究生数学建模竞赛华为杯A题WLAN网络信道接入机制建模求解全过程文档及程序
  • function call到MCP技术演进
  • 如何自己做一个网站/免费推广引流平台有哪些
  • 做微商能利用的网站有哪些问题/智谋网站优化公司
  • 网站怎样优化文章关键词/青岛疫情最新情况
  • icp备案域名网站备案信息/免费推广的方式有哪些
  • 杭州哪里做网站好/小程序设计
  • 管理一个网站的后台怎么做/举一个病毒营销的例子