)
我们先来看题目描述给定两个字符串, 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 100s 和 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 。代码Python3class Solution: def rotateString(self, s: str, goal: str) - bool: m, n len(s), len(goal) if m ! n: return False for i in range(n): for j in range(n): if s[(i j) % n] ! goal[j]: break else: return True return FalseJavaclass 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; } }C#public class Solution { public bool RotateString(string s, string goal) { int m s.Length, n goal.Length; if (m ! n) { return false; } for (int i 0; i n; i) { bool flag true; for (int j 0; j n; j) { if (s[(i j) % n] ! goal[j]) { flag false; break; } } if (flag) { return true; } } return false; } }