当前位置: 首页 > wzjs >正文

简洁大气的网站吕梁购物网站开发设计

简洁大气的网站,吕梁购物网站开发设计,河北省住房城乡建设厅网站,阿克苏地区住房和城乡建设局网站题目: 1、我的写法(超时) 从题面自然想到先用回溯算法把words的全排列先算出来,然后遍历字符串s一次将符合条件的位置加入结果 全排列计算所有可能字符串算法写法: 这是一个模板用于所有全排列算法的情况&#xff0…

题目:

1、我的写法(超时)

从题面自然想到先用回溯算法把words的全排列先算出来,然后遍历字符串s一次将符合条件的位置加入结果

全排列计算所有可能字符串算法写法:

这是一个模板用于所有全排列算法的情况,本质思想是回溯。四个参数:words代表候选单词数组,path代表已经选过的路径,used代表当前元素有没有使用过,result代表结果这里用了set去重

在每次回溯开始前先判断,当前路径有没有包含所有候选单词,如果都包含了的话就加入结果。

从当前path开始算,尝试所有可能性,把没用到的元素加入path递归,然后恢复数据开始下一次回溯

这是我在外层调用的方法,最后显示超时了,超时原因在于当words长度过长时,递归回溯的方法复杂度不好控制,过于耗时

完整代码:

class Solution {

    public List<Integer> findSubstring(String s, String[] words) {

        //全排列找出words能拼接成的所有字符串

        Set<String> concatStr = new HashSet<>();

        boolean[] used = new boolean[words.length];

        backTrack(words, new ArrayList<>(), used, concatStr);

        //遍历字符串s,与所有可能的拼接结果对比,找到符合的结果

        int wordLen = 0;

        List<Integer> result = new ArrayList<>();

        for(int i = 0; i < words.length; i++) {

            wordLen += words[i].length();

        }

        for(int i = 0; i <= s.length() - wordLen; i++) {

            if(concatStr.contains(s.substring(i, i + wordLen))) {

               result.add(i);

            }

        }

        return result;

    }

    private void backTrack(String[] words, List<String> path, boolean[] used, Set<String> result) {

        if(path.size() == words.length) {

            result.add(String.join("", path));

        }

        for(int i = 0; i < words.length; i++) {

            if(used[i] == false) {

                //如果没有被用过加入path中

                used[i] = true;

                path.add(words[i]);

                //递归回溯

                backTrack(words, path, used, result);

                //撤销操作,去掉最后一个元素并标记为未使用

                used[i] = false;

                path.remove(path.size() - 1);

            }

        }

    }

}

2、官方解法

不需要递归回溯,用到了异位字符串思想

官解的思路类似于找到字符串中的字母异位词,只不过它从之前的字母异位变成了字符串异位。注意,体面中words每个单词的长度都是相等的,所以我们是可以等长的去划分子串的,这样划分之后用哈希表differ去划分。

遍历一遍数组,从0开始,直到最后无法满足长度为止。每次循环,都初始化一个哈希表用来记录划分后的单词出现频率和words的误差,等同于之前字符串中找到字母异位词的做法,只不过这里不再是字母而是一个个长度相等的字符串

完整代码:

class Solution {

    public List<Integer> findSubstring(String s, String[] words) {

        List<Integer> res = new ArrayList<Integer>();

        int m = words.length, n = words[0].length(), ls = s.length();

        for (int i = 0; i < n; i++) {

            if (i + m * n > ls) {

                break;

            }

            Map<String, Integer> differ = new HashMap<String, Integer>();

            for (int j = 0; j < m; j++) {

                String word = s.substring(i + j * n, i + (j + 1) * n);

                differ.put(word, differ.getOrDefault(word, 0) + 1);

            }

            for (String word : words) {

                differ.put(word, differ.getOrDefault(word, 0) - 1);

                if (differ.get(word) == 0) {

                    differ.remove(word);

                }

            }

            for (int start = i; start < ls - m * n + 1; start += n) {

                if (start != i) {

                    String word = s.substring(start + (m - 1) * n, start + m * n);

                    differ.put(word, differ.getOrDefault(word, 0) + 1);

                    if (differ.get(word) == 0) {

                        differ.remove(word);

                    }

                    word = s.substring(start - n, start);

                    differ.put(word, differ.getOrDefault(word, 0) - 1);

                    if (differ.get(word) == 0) {

                        differ.remove(word);

                    }

                }

                if (differ.isEmpty()) {

                    res.add(start);

                }

            }

        }

        return res;

    }

}


文章转载自:

http://rXYf7nI3.mgmyt.cn
http://im4KAEBY.mgmyt.cn
http://zUIspWjT.mgmyt.cn
http://9NRjVran.mgmyt.cn
http://xfl78LLL.mgmyt.cn
http://2VOYZnMI.mgmyt.cn
http://POCfT8Oy.mgmyt.cn
http://mZQup3nK.mgmyt.cn
http://XmNiJ2R3.mgmyt.cn
http://oLC6IcJW.mgmyt.cn
http://Q1XnsSBu.mgmyt.cn
http://jEzod3e4.mgmyt.cn
http://c1DPEPPV.mgmyt.cn
http://yTR15TBX.mgmyt.cn
http://ZRwoQxxT.mgmyt.cn
http://BpdXIGaI.mgmyt.cn
http://PFWhIMBB.mgmyt.cn
http://Wm0pPpjT.mgmyt.cn
http://dD6AWiZy.mgmyt.cn
http://ZOPdhVLj.mgmyt.cn
http://uj8w3QRx.mgmyt.cn
http://VwKq5u3H.mgmyt.cn
http://Vfaf9gHI.mgmyt.cn
http://zxImRaZA.mgmyt.cn
http://lxbS7s2y.mgmyt.cn
http://mXeFxx55.mgmyt.cn
http://gA5h6bJG.mgmyt.cn
http://Ea3Yczdx.mgmyt.cn
http://qs7ccPgL.mgmyt.cn
http://3hELs7hq.mgmyt.cn
http://www.dtcms.com/wzjs/652526.html

相关文章:

  • 公司网页网站建疯狂的大叔 wordpress
  • php 网站进入后台wordpress网站放icp
  • 附近的网站建设公司微信搜索推广
  • 西安个人网站建设驻马店手机网站制作
  • 兰州网站建设方法网站备案审核通过时间
  • 哈尔滨做网站数据平台的公司品牌设计包装
  • 互动案例的网站天津低价做网站
  • 阿里巴巴国际站客户经理建设银行手机银行网站
  • 做网站开店游戏代理300元一天
  • 新乡营销网站建设烟台做网站那家好
  • 微网站开发+在线商城常州市城乡建设学院网站
  • 深圳网站建设公司平台免费的图库网站
  • 英文网站设计方案慈溪 网站建设
  • 会展中心网站平台建设方案网站设计书籍
  • 江门cms建站平面设计主要做的是什么
  • 企业介绍微网站怎么做上海工商网企业查询
  • 网站建设 响应式东莞城乡建设规划官网
  • 网站开发设计师薪资做h5的图片网站
  • 临沂市建设局官方网站怎样自学设计室内装修效果图
  • 做自媒体怎么在其它网站搬运内容搜狗网页游戏大厅
  • 一站式推广平台绵阳做手机网站建设
  • 贵阳网站建设1685网站建设的功能需求分析策划书
  • 学做网站必须php吗网站地址查询最新区域名
  • au网站怎么注册西宁网站建设哪家好
  • 手机网站做的比较好的网络推广需要多少费用
  • 做影视网站赚钱吗cms代码做网站
  • 网站后台如何备份专业优定软件网站建设
  • 模板网站制作电子商务网站的建设开发工具
  • 提供网站建设工具的公司中国建设银官方网站
  • 网站vi设计公司WordPress更新时间