class
Rotation {
public
:
vector<
int
> getNext(string s) {
int
length = s.size();
vector<
int
> next(length);
next[
0
] =
0
;
for
(
int
i =
1
,q =
0
;i < length;i++) {
while
(q >
0
&& s[i] != s[q])
q = next[q-
1
];
if
(s[i] == s[q])
q++;
next[i] = q;
}
return
next;
}
bool kmp(string strA,string strB) {
int
length = strB.size();
vector<
int
> next = getNext(strB);
for
(
int
i =
0
,q =
0
;i <
2
*length;i++) {
while
(q >
0
&& strA[i] != strB[q])
q = next[q-
1
];
if
(strA[i] == strB[q])
q++;
if
(q == length)
return
true
;
}
return
false
;
}
bool chkRotation(string A,
int
lena, string B,
int
lenb) {
if
(lena != lenb)
return
false
;
A += A;
return
kmp(A,B);
}
};
class
Prior {
public
:
int
compare(string A,string B) {
string str1 = A + B,str2 = B + A;
int
length = str1.size();
for
(
int
i =
0
;i < length;i++) {
if
(str1[i] < str2[i])
return
-
1
;
if
(str1[i] > str2[i])
return
1
;
}
return
0
;
*/
return (A+B > B+A)?1:0;
}
void
heapify(vector &strArray,
int
p,
int
length) {
string temp = strArray[p];
int
j =
2
*p +
1
;
while
(j < length) {
if
(j+
1
< length && compare(strArray[j+
1
],strArray[j]) ==
1
)
j++;
if
(compare(strArray[j],temp) == 0
)
break
;
strArray[p] = strArray[j];
p = j;
j =
2
*p +
1
;
}
strArray[p] = temp;
return
;
}
string findSmallest(vector strs,
int
n) {
string temp;
for
(
int
p = n/
2
-
1
;p >=
0
;p--) {
heapify(strs,p,n);
}
for
(
int
j = n-
1
;j >
0
;j--) {
temp = strs[
0
];
strs[
0
] = strs[j];
strs[j] = temp;
heapify(strs,
0
,j);
}
temp = strs[
0
];
for
(
int
k =
1
;k < n;k++) {
temp += strs[k];
}
return
temp;
}
};
class
Parenthesis {
public
:
bool chkParenthesis(string A,
int
n) {
int
num =
0
;
for
(
int
i =
0
;i < n;i++) {
if
(num <
0
)
return
false
;
switch
(A[i]) {
case
'('
:
num++;
break
;
case
')'
:
num--;
break
;
default
:
return
false
;
}
}
return
(num ==
0
)?
true
:
false
;
}
};
推荐博文:
经典排序算法的C++实现