力扣热题:796.旋转字符串
开篇
今天下午刷了6道力扣算法题,选了一道有多种解法的题目与大家分享。
题目链接:796.旋转字符串
题目描述
代码思路
完全按照题目的要求,利用StringBuffer中的方法对字符串进行旋转,寻找相同的一项
代码纯享版
class Solution {public boolean rotateString(String s, String goal) {if(s.length() != goal.length()) return false;StringBuffer str = new StringBuffer(s);for(int i = 0; i < s.length(); i++){if(str.toString().equals(goal)) return true;char a = str.charAt(0);str.delete(0,1);str.append("" + a);}return false;}
}
代码逐行解析版
class Solution {public boolean rotateString(String s, String goal) {if(s.length() != goal.length()) return false; //两个字符串如果长度不同,一定不符合要求StringBuffer str = new StringBuffer(s);//改变s的类型,方便操作for(int i = 0; i < s.length(); i++){if(str.toString().equals(goal)) return true; //如果两个字符串一样,返回truechar a = str.charAt(0); //根据题目要求,以下3行对字符串进行旋转str.delete(0,1);str.append("" + a);}return false; //对字符串旋转与其长度相同的次数后仍无法满足要求,返回false}
}
其它解法
1.利用取模运算,不需要对字符串进行旋转即可进行判断
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;}
}
2.这方法太牛逼了。字符串s+s中包含了旋转的所有结果,只需要判断goal是否为s+s的子串。
class Solution {public boolean rotateString(String s, String goal) {return s.length() == goal.length() && (s + s).contains(goal);}
}
结语
如果这道题的分享对你有帮助,点个关注支持一下,我会每天更新力扣题目的讲解,与大家一起进步。