
在字符串处理中,我们经常需要对字符串进行去重操作,即移除字符串中重复出现的字符,只保留每个字符的第一次出现。在此基础上,有时还需要比较不同字符串之间的字符集合,例如计算一个字符串中包含另一个字符串的多少个唯一字符。
本教程的目标是解决以下具体问题:
例如,如果 B = "iyee" 和 a = ["hi", "bye", "bebe"]:
为了高效地解决上述问题,我们将采用模块化的方法,将字符串去重逻辑封装为一个独立的辅助函数,然后主函数负责协调去重和计数过程。
字符串去重是本问题的基础。一个高效的去重方法是使用 HashSet 来跟踪已经遇到的字符。HashSet 提供了 O(1) 的平均时间复杂度来检查元素是否存在和添加元素,这使得它非常适合用于去重。
import java.util.HashSet;
import java.util.Set;
import java.lang.StringBuilder; // 导入StringBuilder
public class StringProcessor {
/**
* 对输入字符串进行字符去重,返回只包含唯一字符的新字符串。
* 字符的顺序将保持其首次出现的顺序。
*
* @param s 待去重的字符串。
* @return 去重后的字符串。
*/
public static String dist(String s) {
StringBuilder sb = new StringBuilder();
Set<Character> set = new HashSet<>(); // 使用HashSet存储已遇到的字符
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i);
// 如果HashSet中不包含当前字符,则添加并将其追加到StringBuilder
if (set.add(currentChar)) { // set.add() 返回 true 如果元素是新加入的
sb.append(currentChar);
}
}
return sb.toString();
}
// ... 主函数 mathProfessor 将在此处添加
}代码解析:
主函数 mathProfessor 将利用 dist 辅助函数来完成整个任务流程。
import java.util.Arrays; // 导入Arrays工具类
public class StringProcessor {
// ... dist 方法在此处
/**
* 根据给定规则处理主字符串和字符串数组。
* 规则包括:对主字符串和数组中每个字符串进行字符去重,
* 然后计算数组中每个去重后的字符串与去重后的主字符串共享的唯一字符数量。
*
* @param b 主字符串。
* @param a 字符串数组。
* @return 一个整数数组,包含每个去重后的数组元素与去重后的主字符串共享的字符数量。
*/
static int[] mathProfessor(String b, String[] a) {
// 1. 对主字符串进行字符去重
b = dist(b);
// 2. 初始化结果存储数组
int[] countArr = new int[a.length];
// 临时存储去重后的数组元素
String[] distinctArrayElements = new String[a.length];
// 3. 对输入数组a中的每个字符串进行字符去重
for (int i = 0; i < a.length; i++) {
distinctArrayElements[i] = dist(a[i]);
}
// 4. 计算每个去重后的数组元素与去重后的主字符串共享的字符数量
for (int i = 0; i < distinctArrayElements.length; i++) {
int currentCount = 0; // 为每个数组元素重置计数器
String currentDistinctElement = distinctArrayElements[i];
// 遍历去重后的主字符串的每个字符
for (int j = 0; j < b.length(); j++) {
char charFromB = b.charAt(j);
// 检查主字符串的当前字符是否包含在去重后的数组元素中
if (currentDistinctElement.contains(Character.toString(charFromB))) {
currentCount++;
}
}
countArr[i] = currentCount; // 存储当前元素的计数
}
return countArr;
}
public static void main(String[] args) {
String mainString = "iyee";
String[] stringArray = {"hi", "bye", "bebe"};
int[] result = mathProfessor(mainString, stringArray);
System.out.println("示例输入: 主字符串=\"" + mainString + "\", 字符串数组=" + Arrays.toString(stringArray));
System.out.println("示例输出: " + Arrays.toString(result)); // 预期输出: [1, 2, 1]
String mainString2 = "apple";
String[] stringArray2 = {"banana", "orange", "pineapple"};
int[] result2 = mathProfessor(mainString2, stringArray2);
System.out.println("示例输入: 主字符串=\"" + mainString2 + "\", 字符串数组=" + Arrays.toString(stringArray2));
System.out.println("示例输出: " + Arrays.toString(result2)); // 预期输出: [2, 2, 3] ('a','p' for banana; 'a','e' for orange; 'a','p','e' for pineapple)
}
}代码解析:
本教程提供了一个清晰且高效的解决方案,用于对主字符串和字符串数组进行字符去重,并计算它们之间的唯一字符交集。通过将字符串去重逻辑封装在 dist 辅助函数中,我们实现了代码的模块化和可重用性。HashSet 的使用确保了去重操作的高效性,而主函数则通过迭代和比较,准确地计算了所需的字符交集数量。这种方法不仅解决了特定问题,也展示了在处理字符串和字符集合时常用的高效编程实践。
以上就是字符串去重与字符交集计数教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号