连接后等于目标字符串的字符串对
给你一个 数字 字符串数组 nums 和一个 数字 字符串 target ,请你返回 nums[i] + nums[j] (两个字符串连接)结果等于 target 的下标 (i, j) (需满足 i != j)的数目。
- 也没啥好总结的
- 新思路:时间复杂度O(n)。数字字符串数组存入hashmap;遍历目标数字字符串所有左右子串,判断左右子串是否与map中key相同
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
*/
package com.huawei.prac;
import java.util.Objects;
class SolutionNd {
public static void main(String[] args) {
String[] nums = {"777", "7", "77", "77"};
String target = "7777";
System.out.println(numOfPairs(nums, target));
}
/**
* 2023. 连接后等于目标字符串的字符串对【】
*
* @param nums 数字字符串数组
* @param target 数字字符串
* @return 可拼接的次数
*/
public static int numOfPairs(String[] nums, String target) {
int num = 0;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
String str = nums[i] + nums[j];
if (Objects.equals(str, target)) {
num += 1;
}
str = nums[j] + nums[i];
if (Objects.equals(str, target)) {
num += 1;
}
}
}
return num;
}
}
或
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
*/
package com.huawei.prac;
import java.util.HashMap;
class SolutionNd {
public static void main(String[] args) {
String[] nums = {"777", "7", "77", "77"};
String target = "7777";
System.out.println(numOfPairs(nums, target));
}
/**
* 2023. 连接后等于目标字符串的字符串对【字符串拼接】
* 新思路:时间复杂度O(n)。
* 数字字符串数组存入hashmap;遍历目标数字字符串所有左右子串,判断左右子串是否与map中key相同
*
* @param nums 数字字符串数组
* @param target 数字字符串
* @return 可拼接的次数
*/
public static int numOfPairs(String[] nums, String target) {
HashMap<String, Integer> hashMap = new HashMap<>();
for (String str : nums) {
hashMap.merge(str, 1, (oldV, newV) -> oldV + 1);
}
int ans = 0;
for (int i = 1; i < target.length(); i++) {
String left = target.substring(0, i);
String right = target.substring(i);
if (left.equals(right)) {
ans += hashMap.getOrDefault(left, 0) * (hashMap.getOrDefault(left, 0) - 1);
} else {
ans += hashMap.getOrDefault(left, 0) * (hashMap.getOrDefault(right, 0));
}
}
return ans;
}
}