• 【字符串】数组中的字符串匹配


    题目描述

    给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。返回这个数组中所有的子字符串。
    如果你可以删除 words[j]最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。


    示例1:

    输入:words = ["mass","as","hero","superhero"]
    输出:["as","hero"]
    解释:"as" 是 "mass" 的子字符串,"hero" 是 "superhero" 的子字符串。
    ["hero","as"] 也是有效的答案。

    解题思路 

    这道题就是一个遍历+子字符串查询的问题;

    基本解决思路:

    • 遍历words中所有的字符串,这个是第一层遍历,把其中字符为words[i];
    • 重新遍历words中所有的字符串,这是第二层遍历,记录为words[j];
    • 判断 if(i !=j && words[j].contains(words[i])) 则把这个 words[i] 放到结果中

    代码实现如下:

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. class Solution1 {
    4. public List stringMatching(String[] words) {
    5. List list = new ArrayList<>(words.length);
    6. for (int i = 0; i < words.length; i++) {
    7. for (int j = 0; j < words.length; j++) {
    8. if (i == j) {
    9. continue;
    10. }
    11. if (words[j].contains(words[i])) {
    12. list.add(words[i]);
    13. break;
    14. }
    15. }
    16. }
    17. return list;
    18. }
    19. }

    这样的解法耗时不是最优秀的,为了降低耗时,进一步优化,效果如下:

    优化思路如下:

    • 将words中所有的字符串做一次拼接,放到StringBuilder中,定义为sb;
    • 拼接完成后直接判断 sb.indexOf(word[i]) != sb.lastIndexOf(word[i]) ,则把word[i]加入到结果中。

    代码实现如下:

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. class Solution {
    4. public List stringMatching(String[] words) {
    5. List list = new ArrayList<>(words.length);
    6. StringBuilder sb = new StringBuilder(3100);
    7. for (String word : words) {
    8. sb.append(word).append(',');
    9. }
    10. for (String word : words) {
    11. if (sb.indexOf(word) != sb.lastIndexOf(word)) {
    12. list.add(word);
    13. }
    14. }
    15. return list;
    16. }
    17. }

    总结 

    这道题我没有做字符串是否包含另外一个字符串的函数,核心关注遍历操作。字符串是否包含另外一个字符串后续整理算法,再提供出来。如果有好的方案,欢迎评论。

     

  • 相关阅读:
    linux服务器更改网络配置
    机器学习强基计划9-2:图解字典学习KSVD算法(附Python实战)
    Gartner公布《2023中国ICT技术成熟度曲线》,得帆信息入选低代码代表厂商
    固态硬盘SSD格式化后,数据恢复的可能性有多大?
    LinkedList 对比 ArrayList
    Mediasoup在node.js下多线程实现
    使用jstack工具排查JVM中CPU高消耗问题
    [翻译] FXGL Assets/资源
    Serverless安全揭秘:架构、风险与防护措施
    pygame 入门实例教程 1 - 复古方块赛车游戏
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126190496