-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathRotateString.java
More file actions
63 lines (56 loc) · 1.62 KB
/
RotateString.java
File metadata and controls
63 lines (56 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package Leetcode;
import java.math.BigInteger;
/**
* @author szh
* @create 2018-08-16 22:48
**/
public class RotateString {
public boolean rotateString(String A, String B) {
String C = A +A ;
for(int i =0 ;i< C.length() ;i++){
int index =i;
int j=0;
for(;j<B.length() ;j++){
if(C.charAt(index) == B.charAt(j)){
index++;
}else{
break;
}
}
if( j == B.length() ){
return true;
}
}
return false;
}
public boolean rotateStringHash(String A, String B) {
if (A.equals(B)) return true;
int MOD = 1_000_000_007;
int P = 113;
int Pinv = BigInteger.valueOf(P).modInverse(BigInteger.valueOf(MOD)).intValue();
long hb = 0, power = 1;
for (char x: B.toCharArray()) {
hb = (hb + power * x) % MOD;
power = power * P % MOD;
}
long ha = 0; power = 1;
char[] ca = A.toCharArray();
for (char x: ca) {
ha = (ha + power * x) % MOD;
power = power * P % MOD;
}
for (int i = 0; i < ca.length; ++i) {
char x = ca[i];
ha += power * x - x;
ha %= MOD;
ha *= Pinv;
ha %= MOD;
if (ha == hb && (A.substring(i+1) + A.substring(0, i+1)).equals(B))
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println(new RotateString().rotateStringHash("abcde", "abced"));
}
}