题目描述
难度:简单
算法实现
模轮转(类似的题挺多的)
class Solution {
public boolean rotateString(String s, String goal) {
char[] chars = s.toCharArray();
int charsLen = chars.length;
int count = 0;
while(count<chars.length){
StringBuffer buffer = new StringBuffer();
for(int i =count;i<charsLen+count;++i){
buffer.append(chars[i%charsLen]);
}
if(buffer.toString().equals(goal)){
return true;
}
count++;
}
return false;
}
}
/*
[2022年04月07日00时38分20秒_]
开始构思
================
[2022年04月07日01时00分15秒_]思路1:
s旋转若干次,是否能变成goal。
若干次是否有个上限次数?
分析:上限次数是s的字符串长度,因为超过了就变成了轮转,没有意义,还浪费时间性能。
等值判断?
分析:是等值判断
================
[2022年04月07日01时00分34秒_]编码完成,测试了
================
[2022年04月07日01时01分05秒_]ok,通过了
================
[2022年04月07日01时03分14秒_]在编码过程中,本题的关键在于取模 % 的运算,取模具有轮转性质。
================
*/
模轮转(编码优化)
class Solution {
public boolean rotateString(String s, String goal) {
char[] chars = s.toCharArray();
int charsLen = chars.length;
int count = 0;
StringBuffer buffer = new StringBuffer();
while(count<charsLen){
for(int i =count;i<charsLen+count;++i){
buffer.append(chars[i%charsLen]);
}
if(buffer.toString().equals(goal)){
return true;
}
buffer.delete(0,charsLen);
count++;
}
return false;
}
}
/*
[2022年04月07日00时38分20秒_]
开始构思
================
[2022年04月07日01时00分15秒_]思路1:
s旋转若干次,是否能变成goal。
若干次是否有个上限次数?
分析:上限次数是s的字符串长度,因为超过了就变成了轮转,没有意义,还浪费时间性能。
等值判断?
分析:是等值判断
================
[2022年04月07日01时00分34秒_]编码完成,测试了
================
[2022年04月07日01时01分05秒_]ok,通过了
================
[2022年04月07日01时03分14秒_]在编码过程中,本题的关键在于取模 % 的运算,取模具有轮转性质。
================
*/
性能没有大差别
java字符串操作函数contains函数的使用
官方题解中解法之一是对contains函数的使用,使用java版本已实现了的字符串操作api。
[2022年04月08日16时38分34秒_]
两字符串长度须相等,只需叠加一次其一字符串,再与另一个字符串做是否包含检测,便能求出结果。
================
class Solution {
public boolean rotateString(String s, String goal) {
return s.length() == goal.length() && (s+s).contains(goal);
}
}