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

做网站设计提成赚钱吗辽宁省住房和城乡建设厅网站换了

做网站设计提成赚钱吗,辽宁省住房和城乡建设厅网站换了,网站开发工作好不好,大学网站建设的目标与思路本文将详细解析解决这个问题的思路,并逐步优化实现方案。 问题描述 给定两个字符串 word1 和 word2,如果通过以下操作可以将 word1 转换为 word2,则认为它们是接近的: 交换任意两个现有字符。将一个现有字符的每次出现转换为另…

本文将详细解析解决这个问题的思路,并逐步优化实现方案。

问题描述

给定两个字符串 word1word2,如果通过以下操作可以将 word1 转换为 word2,则认为它们是接近的:

  1. 交换任意两个现有字符。
  2. 将一个现有字符的每次出现转换为另一个现有字符,并对另一个字符执行相同的操作。

你需要判断 word1word2 是否接近。

示例

示例 1:

输入:word1 = "abc", word2 = "bca"
输出:true
解释:2 次操作从 word1 获得 word2 。
执行操作 1:"abc" -> "acb"
执行操作 1:"acb" -> "bca"

示例 2:

输入:word1 = "a", word2 = "aa"
输出:false
解释:不管执行多少次操作,都无法从 word1 得到 word2 ,反之亦然。

示例 3:

输入:word1 = "cabbba", word2 = "abbccc"
输出:true
解释:3 次操作从 word1 获得 word2 。
执行操作 1:"cabbba" -> "caabbb"
执行操作 2:"caabbb" -> "baaccc"
执行操作 2:"baaccc" -> "abbccc"

1657. 确定两个字符串是否接近 - 力扣(LeetCode)

解决思路

初步想法

最初的思路是通过使用 map 来记录字符及其出现的次数,然后通过 set 判断两个字符串的字符集是否一致,最后通过排序后的 vector 判断两个字符串的字符频次是否一致。

class Solution {
public:bool closeStrings(string word1, string word2) {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);if(word1.size() != word2.size()) return false;// 首先判断map是不是都是一样的,包括char和int的个数;然后判断,是不是不管char,只要出现的次数一样就可以过unordered_map<char , int > m1 , m2;for(auto c : word1){m1[c] ++;}for(char d : word2){m2[d] ++;}if(m1 == m2) return true;unordered_set<char> s1(word1.begin() , word1.end());unordered_set<char> s2(word2.begin() , word2.end());if(s1 != s2) return false;vector<int> v1 , v2;for(auto pair : m1) v1.push_back(pair.second);for(auto pair : m2) v2.push_back(pair.second);sort(v1.begin() ,v1.end());sort(v2.begin() , v2.end());return v1 == v2;}
};

虽然初步思路可以解决问题,但在时间和空间复杂度上还有优化空间。

优化思路

1657. 确定两个字符串是否接近 - 力扣官方题解

官方解决方案利用了 word1word2 仅包含小写字母这一条件,使用大小固定为 26 的 vector<int> 数组来记录字符频次。通过 ASCII 码减去 'a' 得到对应的下标,再进行操作。

class Solution {
public:bool closeStrings(string word1, string word2) {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);vector<int> v1(26) , v2(26);for(auto c : word1){v1[c - 'a'] ++;}for(auto d : word2){v2[d - 'a'] ++;}for(int i = 0 ; i < 26 ; i ++){if(v1[i] == 0 && v2[i] > 0 || v1[i] > 0 && v2[i] == 0) return false;}sort(v1.begin() , v1.end());sort(v2.begin() , v2.end());return v1 == v2;}
};

详细解析

  1. 字符频次统计

    • 使用大小为 26 的 vector<int> 数组 count1count2 来记录 word1word2 中每个字符的频次。通过 c - 'a' 得到对应的下标,这一步时间复杂度为 O(n)
  2. 字符集检查

    • 遍历 count1count2,如果某个字符在一个字符串中出现而在另一个字符串中没有出现,则返回 false。这一步的时间复杂度为 O(1),因为数组大小固定为 26。
  3. 字符频次数组排序和比较

    • count1count2 进行排序,然后比较两个排序后的数组是否相等。排序的时间复杂度为 O(26 log 26),即 O(1)

为什么需要排序?

排序后的数组能直接比较每个字符的频次是否一致。这是因为交换字符不会改变频次,转换字符对频次排序也没有影响。通过排序并比较频次数组,我们能确保所有字符频次匹配。

复杂度分析

时间复杂度

  • 字符频次统计的时间复杂度为 O(n),其中 n 为字符串的长度。
  • 字符集检查的时间复杂度为 O(1),因为 count1count2 的大小固定为 26。
  • 排序的时间复杂度为 O(26 log 26),即 O(1)

总的时间复杂度为 O(n)

空间复杂度

  • 使用了两个大小为 26 的 vector<int> 数组,空间复杂度为 O(1)

总结

在这里插入图片描述

通过优化,我们利用字符串仅包含小写字母这一特性,将问题简化为固定大小的数组操作,实现了更高效的解决方案。这种方法充分利用了题目中的限制条件,极大地优化了时间和空间复杂度。

http://www.hyszgw.com/news/76956.html

相关文章:

  • 大气蓝色wap网站模板遵义网站建设厂家
  • 网站上线有什么线上活动可以做上海整站优化
  • 室内设计学校哪个好聊城网站优化网络推广
  • 曲靖手机网站建设爆款采集推广引流软件
  • 如何制作门户网站品牌营销公司排名
  • 做护肤的网站有哪些建筑八大员报名官网
  • 怎样做产品推广做网站域名优化的怎么样
  • 佛山网站推广怎样维护网站建设
  • 北京公司做网站做响应网站
  • 天津和平做网站多少钱wordpress安装图片
  • ps如何做音乐网站做汽车团购的网站
  • 做网站用什么开源程序漯河商城网站建设
  • 个人网站的主题电商新手从哪里做起
  • 扬州网站建设电话微信小程序电商平台开发
  • 校考前做试题的网站高端网站开发秦帝
  • 足球门户网站建设网站开发免费视频播放器
  • 网站没有icp备案是不是就是骗子网页设计制作是干什么的
  • 项城网站设计网站怎么做搜索引擎优化、
  • 一站式做网站多少钱合作网站制作
  • 网站制作昆山谷歌云安装wordpress
  • 洛阳建设网站公司名字大全不重名
  • 网站开发培训收费网站需要怎么做的吗
  • 视频网站哪个做的好网站推广的优化
  • wordpress制作电商网站免费做直播网站
  • 网站后台超链接怎么做做网站使用什么语言写
  • 网站建设 郑州企业支付宝登录入口
  • 网站建设的费用是多少中学生网站作品
  • 无锡建设信息中心网站嘉峪关市建设局公示公告网站
  • 网站策划教程十堰微网站建设价格
  • 西双版纳州住房和城乡建设局网站用网站建设费用