leetcode 相似度为k的字符串 困难
时间:2021-08-28
本文章向大家介绍leetcode 相似度为k的字符串 困难,主要包括leetcode 相似度为k的字符串 困难使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
用 dfs 暴力搜索即可通过本题。即如下代码:
class Solution { public: int kSimilarity(string s1, string s2) { solve(s1, s2, 0, 0); return ret; } private: int ret = INT_MAX; void solve(string &s1, string &s2, int i, int cnt) { if(i == s2.size()) { ret = min(ret, cnt); return ; } if(s1[i] == s2[i]) solve(s1, s2, i + 1, cnt); else { for(int j = i + 1; j < s2.size(); ++ j) { if(s2[j] != s1[i]) continue; swap(s2[i], s2[j]); solve(s1, s2, i + 1, cnt + 1); swap(s2[i], s2[j]); } } } };
可以剪枝进行优化:
在 dfs 中的 for 循环里面,如果交换后 s2[j] == s1[j],那么当前交换肯定是最优的,可以在末尾进行 break..其次,如果 cnt >= ret 了,也是可以直接 return 的
class Solution { public: int kSimilarity(const string &s1, string s2) { solve(s1, s2, 0, 0); return ret; } private: int ret = INT_MAX; void solve(const string &s1, string &s2, int i, int cnt) { if (cnt >= ret) return; if (i == s2.size()) { ret = min(ret, cnt); return; } if (s1[i] == s2[i]) { solve(s1, s2, i + 1, cnt); return; } for (int j = i + 1; j < s2.size(); ++j) { if (s2[j] != s1[i] || s2[j] == s1[j]) continue; swap(s2[i], s2[j]); bool flag = s1[j] == s2[j]; solve(s1, s2, i + 1, cnt + 1); swap(s2[i], s2[j]); if(flag) break; // 当前肯定是一次最优, 没必要继续 for 求解 } } };
剪枝与未剪枝的时间:
原文地址:https://www.cnblogs.com/rookie-acmer/p/15200478.html
- [接口测试 - http.client篇] 17 http.client之入门级接口测试框架
- 评论JS插件~多说+畅言
- jQuery HTML5 Uploader
- 1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
- [接口测试 - http.client篇] 16 基于http.client之POM实战一下
- 数论部分第一节:素数与素性测试【详解】
- ProtoBuf 序列化工具组件
- C++STL vector简单使用练习1
- 小解Redis 系列
- 小侃 SQL加密和性能
- 接口测试 | 25 requests + pytest测试实例
- 接口测试 | 24 requests + unittest集成你的接口测试
- 接口测试 23 requests基础入门二
- 写让别人能读懂的代码+网页性能管理详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Docker 入门到实战教程(二)安装Docker
- Docker 入门到实战教程(三)镜像和容器
- Docker 入门到实战教程(四)容器链接
- Docker 入门到实战教程(五)构建Docker镜像
- Docker 入门到实战教程(六)Docker数据卷
- Docker 入门到实战教程(七)安装Redis
- Docker 入门到实战教程(八)安装Mysql
- Docker 入门到实战教程(九)安装Nginx
- Docker教程(九)部署Spring Boot项目
- Docker 入门到实战教程(十一)部署Vue+SpringBoot 前后端分离项目
- Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
- Docker 入门到实战教程(十三)Docker Compose
- 解决IDEA2020.1版本的lombok插件问题
- 工具系列 | 视频监控RTSP转HLS解决方案
- Redis系列 |(一)六种基本数据结构