Find and Replace Pattern(从字符串数组中找到类型匹配的字符串)

最近在社区上看到一个关于:从字符串数组中找到类型匹配的字符串.如(abb丶dcc满足011排列类型匹配).看了一下其java代码(但是没有注释),思考了一会,然后自己跟着写了一份.现在贴出来分享给大家:

package com.mvc.test;
import java.util.*;
/**
* @author chaunceystart
* @create 2018-08-22 7:11
*/
public class Test {
public static void main(String[] args) {
for (String str : findAndReplacePattern(new String[]{"abc", "dee", "mee", "aqq", "dkd", "ccc"}, "abb")) {
System.out.println(str);
}
}

public static List<String> findAndReplacePattern(String[] words, String pattern) {
int[] patternPos = getStrPos(pattern); // 1. 首先获取我们需要的字符串的类型
List<String> retList = new ArrayList<>();
for (String word : words) {
//2.每次都用我们第一次获得的int数组和我们循环遍历的数组去进行比较
if (Arrays.equals(getStrPos(word), patternPos)) {
retList.add(word);
//若返回true则放回符合我们字符串类型的集合当中
}
}
return retList;
}

private static int[] getStrPos(String str) {
// 1. 创建一个key为char value为Integer的Map
Map<Character, Integer> posMap = new HashMap<>();
// 2. 创建一个char类型的数组,使用入参给这个char数组进行赋值
char[] arr = str.toCharArray();
// 3. 初始化一个int类型的数组,用来存储map的value
int[] posArr = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
// 4. 当map.get(char数组的元素)为空时,就说明这个字符是首次出现在char数组中
if (posMap.get(arr[i]) == null) {
// 5. 那么map就以key为该字符,value为i的方式进行存储
posMap.put(arr[i], i);
}
// 6. int 类型的数组记录该map的value
posArr[i] = posMap.get(arr[i]);
}
//7. 将该数组返回
return posArr;
}
}
有什么地方写的明白的话欢迎大家一起交流.

转载于:https://www.cnblogs.com/ChaunceyBee/p/9515760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值