zoukankan      html  css  js  c++  java
  • C++ code:判断字符串相等

    如果两个字符串中0和1的个数分别相等,则称该对字符串为相等。

    方法一:

    由于string类对于读取文件中子串以及比较都很方便,所以,用string类的对象来逐对存放字串,然后将字串分别排序后对其进行比较是直接的思路。

     1 #include<iostream>
     2 #include<fstream>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     ifstream in("string.txt");
     9     for (string s, t; in >> s >> t;)
    10     {
    11         sort(s.begin(),s.end);
    12         sort(t.begin(),t.end);
    13         cout << (s==t?"yes
    ":"no
    ");
    14     }
    15 }

    程序中用到了算法sort调用,所以要包含算法库头文件algorithm。

    方法二:

    基本的排序算法需要对所有元素进行两重循环的操作,最快的排序算法也需要O(nlogn)数量级的运算次数,然而,如果仅对字串分别数一下1和0的个数,再比较其个数值,效率会更高:

     1 #include<iostream>
     2 #include<fstream>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     ifstream in("string.txt");
     9     for (string s, t; in >> s >> t;)
    10     {
    11         int sc1 = count(s.begin(), s.end(),'1');
    12         int sc0 = count(s.begin(), s.end(), '0');
    13         int tc1 = count(t.begin(), t.end(), '1');
    14         int tc0 = count(t.begin(), t.end(), '0');
    15         cout << (sc1==tc1&&sc0==tc0?"yes
    ":"no
    ");
    16     }
    17 }

    count计数也包含在C++标准库中,由于count算法只有一重循环的处理时间,虽然程序中有4次count调用,但比较排序算法,对于元素个数激增时,其效率能明显体现出来。当然有些读者可能看到了还能对其做进一步优化:count算法是线性的,无论如何,一重循环是不可避免的。

    方法三:

    根据问题描述,字串中非1即0, so,“0”的个数在总长度已知的情况下,可以不使用count算法,通过并列地判断总长度的相等性而直接得到:

     1 #include<iostream>
     2 #include<fstream>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     ifstream in("string.txt");
     9     for (string s, t; in >> s >> t;)
    10     {
    11         int s1 = count(s.begin(), s.end(), '1');
    12         int t1 = count(t.begin(), t.end(), '1');
    13         cout << (s1==t1&&s.length()==t.length()?"yes
    ":"no
    ");
    14     }
    15 }

    总结:

    上述程序不但在语句行上缩减了两行,更重要的是通过代码优化而提高了效率

    提高程序运行的效率,在编程阶段主要有三个途径:

    (1)吃透问题,采用合理的方案设计;

    (2)采用尽可能有效的算法;

    (3)采用合理的程序结构、内存布局和代码优化。

    上述三者是相辅相成的,你中有我,我中有你。吃透了问题实质,才能合理选择算法;采用更有效的算法,才能实现代码优化;代码优化本身,又是对问题的确切把握。

     

  • 相关阅读:
    ArcMap操作随记(10)
    python的matplotlib.pyplot绘制甘特图
    C# 使用Newtonsoft.Json读写Json文件
    MVVM-后台代码绑定事件命令
    abp vue did you register the component correctly
    .net orm写入oracle数据库的clob字段提示:"ORA-01461:仅可以插入LONG列的LONG值赋值"
    WindowsServer2012 IIS8 500.19错误 ExtensionlessUrlHandler-Integrated-4.0
    Wpf TextBox 如何简单粗暴的实现水印效果?
    面向对象23种设计模式系列(三)- 行为型设计模式
    值类型取值范围、与运算(&)、或运算(|)、非运算(~)、异或运算(^)、位运算和位枚举
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9091977.html
Copyright © 2011-2022 走看看