我们有两个字符串 a 和 b。我们需要将字符串 a 转换为 b。
变换规则
例如。
a = daBcd
b = ABC
Run Code Online (Sandbox Code Playgroud)
a将and首字母大写,并从 中c删除。这样我们就可以转变成. (我在HackerRank上发现了这个问题)dstring aab
所以我写了如下java代码:
static boolean abbreviation(String a, String b, int i, int j, Map<String, Boolean> memo) {
if(j==b.length()){
if(i==a.length())
return true;
return !a.substring(i, a.length()).matches("\\D*[A-Z]+\\D*");
}
if(i==a.length())
return false;
String key = i+"-"+j;
if(memo.containsKey(key))
return memo.get(key);
if(a.substring(i).equalsIgnoreCase(b.substring(j))){
memo.put(key, true);
return true;
}
if(Character.isUpperCase(a.charAt(i))){
if(a.charAt(i)==b.charAt(j)){
memo.put(key, abbreviation(a, b, i+1, j+1, …Run Code Online (Sandbox Code Playgroud) 我正在使用 apache HttpClient 4.5 在 java 中处理 http 请求。
根据文档 HttpClient 是线程安全的,因此我们可以对所有线程使用相同的 HttpClient 实例,但 HttpContext 应该由每个执行线程维护。
对于身份验证(NTLM 身份验证),我们需要将 CredentialsProvider 设置为上下文,这将在服务器上进行身份验证。
要求
所有请求都将使用相同的身份验证详细信息访问同一服务器。我只想在应用程序初始化或第一次请求服务器时进行一次身份验证,所有其他请求都应在同一会话中提供服务,但可以来自不同的线程。
我可以使用相同的上下文,因为使用相同的身份验证详细信息访问同一台服务器,还是有另一种方法来实现它?
我想使用 CDK 代码创建 IAM 角色的以下信任关系
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ABC>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<ID>"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<XYZ>:root"
},
"Action": "sts:AssumeRole"
}
]
}
Run Code Online (Sandbox Code Playgroud)
上述策略是使用 AWS 控制台直接创建的,但是当我通过 CDK 代码创建它时,我得到类似以下内容的信息:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<XYZ>:root",
"arn:aws:iam::<ABC>:root"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<ID>"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我使用以下 CDK 代码来实现此目的:
const …Run Code Online (Sandbox Code Playgroud)