题目地址:

https://leetcode.com/problems/string-matching-in-an-array/

给定一个长 n n n的字符串数组 A A A,找到所有是其余某个字符串的子串的那些字符串。返回之。

先将字符串按照长度从小到大排序,然后枚举每个字符串是否是比其更长的某个字符串的子串即可。代码如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution {
    public List<String> stringMatching(String[] words) {
        List<String> res = new ArrayList<>();
        Arrays.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length()));
        for (int i = 0; i < words.length; i++) {
            for (int j = i + 1; j < words.length; j++) {
                if (words[j].contains(words[i])) {
                    res.add(words[i]);
                    break;
                }
            }
        }
        
        return res;
    }
}

时间复杂度 O ( n log ⁡ n + n 2 l ) O(n\log n+n^2l) O(nlogn+n2l) l l l是最长字符串长度,空间 O ( 1 ) O(1) O(1)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐