假设给定字符串$secret = 'SECRET_KEY';
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['recaptcha']);
$responseData = json_decode($verifyResponse);
if($responseData->success){
//valid response, move forward
}else{
//captcha check failed, throw an error
}
和s = "aba"
。那么我们可以使用字符串字符进行的排列是
k = 2
答案是3。
如果aa ab ba
和s = "aabb"
,则可能的排列是
k = 2
所以答案是4。
我们只能使用字符出现在字符串中的次数不超过此次数,但不能超过该次数。
有没有公式或某种方法可以快速找到它?
注意:K不是唯一字符的数量,例如。 aa ab ba bb
的k值可以是s = "aabbcdd"
。
答案 0 :(得分:0)
import java.util.*;
class solution {
static int findPermutation(String str, int k) {
boolean[] has = new boolean[26];
Arrays.fill(has, false);
int cnt = 0;
for (int i = 0; i < str.length(); i++) {
if (!has[str.charAt(i) - 'a']) {
cnt++;
has[str.charAt(i) - 'a'] = true;
}
}
int ans = 1;
for (int i = 2; i <= cnt; i++)
ans *= i;
for (int i = cnt - k; i > 1; i--)
ans /= i;
return ans;
}
// Driver code
public static void main(String args[]) {
String str = "rrpk";
int k = 2;
System.out.println(findPermutation(str, k));
}
}
算法: 首先计算字符串中的uniqe字符,然后从uniqe字符列表中取k个字符并将其排列,即nPr = n! /(n – r)!。