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

相似度为 K 的字符串

题目链接

相似度为 K 的字符串

题目描述

注意

  • s1和s2只包含集合 {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’} 中的小写字母
  • s2是s1的一个字母异位词

解答思路

  • 可以深度优先遍历交换字母使得s1和s2尽可能接近,基本思路是:设定一个指针idx指向s1和s2的相同位置,如果此时指针处的字母不同(此时前面的字母已经相同),则需要将此处的字母与后面的字母进行交换,使用该位置处的字母相同后再继续深度优先遍历,深搜过后需要进行回溯,防止对其他深搜过程造成影响
  • 为了降低时间复杂度,还要注意进行剪枝
    • 在进入本次dfs时,如果交换次数过多,则可以直接进行剪枝
    • 在寻找后面的字母对idx处字母进行交换时,如果相似度仍然相同(arr1[j] != arr2[j]),则可以进行剪枝
    • 在寻找后面的字母对idx处字母进行交换时,如果如果交换后对应i位和j位处的字母都相等,则可以认为已是最优交换(一次交换相似度最多减少2),可以进行剪枝

代码

class Solution {int n;int res;public int kSimilarity(String s1, String s2) {n = s1.length();res = Integer.MAX_VALUE;char[] arr1 = s1.toCharArray();char[] arr2 = s2.toCharArray();dfs(arr1, arr2, 0, 0);return res;}public void dfs(char[] arr1, char[] arr2, int idx, int count) {// 交换次数过多,直接剪枝if (count >= res) {return;}for (int i = idx; i < n; i++) {if (arr1[i] != arr2[i]) {for (int j = i + 1; j < n; j++) {// 贪心选择->保证交换后相似度更低if (arr1[j] == arr2[i] && arr1[j] != arr2[j]) {swap(arr1, i, j);dfs(arr1, arr2, i + 1, count + 1);// 回溯swap(arr1, i, j);// 贪心选择->如果交换后对应i位和j位处的字母都相等,则可以认为已是最优交换if (arr1[i] == arr2[j]) {break;}}}return;}}res = Math.min(res, count);}public void swap(char[] arr, int i, int j) {char tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
}

关键点

  • 深度优先遍历的思想
  • 注意剪枝的情况
http://www.lryc.cn/news/462782.html

相关文章:

  • [云] Project Analysis
  • 腾讯六宫格本地识别,本地模型识别,腾讯六图识别
  • Transformer图解以及相关的概念
  • Nginx缓存静态文件
  • 【隐私计算】隐语HEU同态加密算法解读
  • 用C#实现互斥操作
  • 【黑马点评优化】之使用Caffeine+Redis实现应用级二层缓存
  • CEEMDAN +组合预测模型(BiLSTM-Attention + ARIMA)
  • 2.1.ReactOS系统中断描述符的格式KIDTENTRY结构体
  • 三、ElementPlus下拉搜索加弹窗组件的封装
  • androidStudio编译导致的同名.so文件冲突问题解决
  • 大学新生编程入门指南:如何选择编程语言与制定学习计划
  • SpringAI快速上手
  • 07 django管理系统 - 部门管理 - 搜索部门
  • 数据操作学习
  • 什么是网络代理
  • 安防监控摄像头图传模组,1公里WiFi无线传输方案,监控新科技
  • 问:JVM中GC类型有哪些?触发条件有哪些?区别是啥?
  • 【操作系统的使用】Linux 输入输出重定向:掌握控制台的高级用法
  • 无线通信中的四个关键概念:OFDM、多径效应、CSI和信道均衡
  • 如何高效规划千人大会?数字化会议管理的实战经验分享!建议收藏!
  • mysql指令笔记(基本)
  • web前端-----html5----用户注册
  • bug的定义和测试
  • Kamailio-Sngrep 短小精悍的利器
  • 9.6 Linux_I/O_IO模型
  • React 探秘(一):fiber 架构
  • poi通过在word中写入了表格,通过libreoffice转换成PDF后,word中刚才画的表格宽度无限拉伸问题的解决。
  • 尚硅谷rabbitmq2024 集群篇仲裁队列 第52节 答疑
  • 《Spring Cloud 微服务:构建高效、灵活的分布式系统》