旋转字符串的解题思路与算法分享
我们先来看题目描述:
给定两个字符串, 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;}
}
好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!