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

做网站编码网络协议分析课程设计报告

做网站编码,网络协议分析课程设计报告,安卓商城网站开发,苏州互联网招聘文章目录 一、压缩字符串思路 二、仅执行一次字符串交换能否使两个字符串相等思路1#xff1a;计数法思路2#xff1a;模拟法 总结 一、压缩字符串 点我直达~ 思路 使用双指针法 大致过程如下#xff1a; 使用双指针#xff0c;分别读#xff08;read#xff09;计数法思路2模拟法 总结 一、压缩字符串 点我直达~ 思路 使用双指针法 大致过程如下 使用双指针分别读read写write指针读指针不断向后走当read指针走到最后位置处时或read和read的下一个位置与当前位置不相等时说明该read指针走到了某一串相同子串的最后位置处。此时write指针开始记录具体的字符给定一个left指针记录当前位置此时每一个子串的长度都是 read - left 1使用短除法将子串的长度记录下来再进行逆置即可。 具体操作如下 1.给定两个指针write 和 leftleft指针记录每一个子串的开始位置分别指向第一个元素的位置。2.使用read指针遍历字符串当read遇到其后面一个字符与当前字符不等或者read走到末尾时此时将write指针记录当前子串的字符以及长度那就让write一边记录一边往后走。3.当write指针开始记录子串的长度时给一个下标begin这个begin就是记录子串的长度的起始位置比如一个串的长度为123需要记录到chars数组的是[“1”,“2”,“3”]begin记录着1下标的位置。4.使用短除法将某一个串的长度的每一位记录下来然后逆置逆置的开始是begin结尾是write。5.因为write总是向后走知道走到记录完所有的字符以及每一个相同的字符串的长度则最终返回write的长度即可 具体代码如下 class Solution { public:int compress(vectorchar chars) {int write 0,left 0;for(int read 0;readchars.size();read){if(read chars.size()-1 ||chars[read]!chars[read1]){ chars[write] chars[read];//存储字符int begin write; // 逆置的左下标int n read - left 1 ; if(n1){while(n){chars[write] (n%10) 0;n/10;}//逆置的右下标是writereverse(chars[begin],chars[write]);}left read1;}}return write;} };时间复杂度On空间复杂度O1 二、仅执行一次字符串交换能否使两个字符串相等 点我直达~ 思路1计数法 情况1如果两个字符串的长度不同那么不管怎么交换一定不等返回false情况2如果两个字符串的长度相同 情况1如果不相同的字符超过两个或者不相同的字符只有一个那么两个字符串不管怎么交换字符一定不等返回false 情况2如果不相同的字符恰好为两个此时有两种方法解决 1.交换这两个不相同的字符的位置如果交换后s1 s2返回true否则false。 2.判断 s1[i] s2[j] ,s1[j] s2[i]是否满足即可。 具体请看下面代码 class Solution { public:bool areAlmostEqual(string s1, string s2){//1.相等trueif(s1 s2)return true;//2.长度不等falseif(s1.size() ! s2.size())return false;//3.遍历s1和s2,如果发现有两个以上字母不同不管怎么交换都不等 vectorint v1; // 两个下标int count 0;//计算s1和s2有几个不等的字母for(int i 0;is1.size();i){if(s1[i]!s2[i]){count;v1.push_back(i);}}//如果不是只有两个字母不同不管怎么交换一定不等。if(count !2)return false;return s1[v1[0]] s2[v1[1]] s1[v1[1]] s2[v1[0]] ;//下面的操作也可//swap(s2[v1[0]],s2[v1[1]]);// if(s1 s2)// return true;// return false;} };思路2模拟法 模拟法整体思路与计数法大致相同 给定两个初始值pos1 pos2均为 -1记录两个字符串不同的字符的下标。 如果不同位置超过两个或者只有一个返回false如果不同位置为两个或者没有不同位置返回true 具体请看下面代码 class Solution { public:bool areAlmostEqual(string s1, string s2){int n s1.size(),pos1 -1,pos2 -1;for(int i 0;in;i){if(s1[i] s2[i])continue;if(pos1 -1)pos1 i;else if(pos2 -1)pos2 i;//该情况是超过两个不同的字符elsereturn false;}//该情况是没有不同的字符if(pos1 -1)return true;//该情况是只有一个不同的字符if(pos2 -1)return false;//该情况是正常情况return s1[pos1] s2[pos2] s1[pos2] s2[pos1];} };总结 通过写今天的两道题重新认识了双指针法的厉害的地方哪哪都可以考虑双指针法。 比如排序字符串逆置字符串压缩等等有关字符串的题都可以考虑一下双指针法 还有只要涉及到两个字符串中的两个字符的问题都可以进行下标的模拟或者计数法来实现。
http://www.w-s-a.com/news/327518/

相关文章:

  • 英文网站推广工作一个虚拟主机可以做几个网站吗
  • 微网站 合同重庆电力建设设计公司网站
  • 网站怎么设置支付网站源码下载后怎么布置
  • 广州市公需课在哪个网站可以做手机商城软件下载
  • app网站建设需要什么长治网站建设公司
  • 网站模板平台广告宣传网站
  • cc域名的网站做网站放太多视频
  • 让公司做网站要注意什么建设工程公司企业文化
  • 佛山搭建建网站哪家好微信如何建立自己的公众号
  • 联想公司网站建设现状广州建网站兴田德润团队
  • 网站开发的技术有网页设计实训报告工作内容和步骤
  • 视频做网站长沙网站制作平台
  • js网站建设北京seo公司优化网络可见性
  • 付款网站源码建网站卖东西
  • 用php做的录入成绩的网站wordpress等级插件
  • 网站运营优化方案广西桂林公司
  • 快递网站策划怎么做ppt长春建设信息网站
  • 做服装搭配图的网站有哪些经营一个网站要怎么做
  • 呼市品牌网站建设那家好增城住房和建设局网站
  • 网站首页布局设计代码太仓网站开发建设服务
  • 学校网站建设与管理porto wordpress模板
  • 余姚做网站公司网站建设有哪些基本流程
  • 门户网站建设的报价百度医生在线问诊
  • 北京公司注册在哪个网站浏览器打开网址404
  • 廊坊做网站公司绣花图案设计网站
  • 网站空间租用哪个好购物网站建设模板图片
  • 建设银行包头分行网站泰安网签成交量最新
  • 手机微网站与微官网现在去成都需要隔离吗
  • 学校的二级网站怎么建设深圳企业网站制作设计
  • 自己做qq头像静态的网站网站建设是属于软件开发费吗