题目链接

旋转字符串

题目描述

image.png

实现代码

个人思路实现代码:

  1. class Solution {
  2. public boolean rotateString(String s, String goal) {
  3. int m = s.length();
  4. int n = goal.length();
  5. if(m != n) {
  6. return false;
  7. }
  8. char firstG = goal.charAt(0);
  9. for(int i=0; i<m; i++) {
  10. char curS = s.charAt(i);
  11. if(curS == firstG) {
  12. int j = i+1;
  13. int k = 1;
  14. boolean access = true;
  15. for(; j<m & k<n; j++, k++) {
  16. if(s.charAt(j) != goal.charAt(k)) {
  17. access = false;
  18. break;
  19. }
  20. }
  21. if(access) {
  22. for (j = 0; j < i; j++) {
  23. if (s.charAt(j) != goal.charAt(k + j)) {
  24. access = false;
  25. break;
  26. }
  27. }
  28. }
  29. if(access) {
  30. return true;
  31. }
  32. }
  33. }
  34. return false;
  35. }
  36. }

参考思路一:源字符串拼接寻找子串思想:

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

参考思路二:数学思想:
image.png

  1. class Solution {
  2. public boolean rotateString(String s, String goal) {
  3. int m = s.length(), n = goal.length();
  4. if (m != n) {
  5. return false;
  6. }
  7. for (int i = 0; i < n; i++) {
  8. boolean flag = true;
  9. for (int j = 0; j < n; j++) {
  10. if (s.charAt((i + j) % n) != goal.charAt(j)) {
  11. flag = false;
  12. break;
  13. }
  14. }
  15. if (flag) {
  16. return true;
  17. }
  18. }
  19. return false;
  20. }
  21. }