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

方法一:

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

 #include<iostream>
#include<fstream>
#include<algorithm>
using namespace std; int main()
{
ifstream in("string.txt");
for (string s, t; in >> s >> t;)
{
sort(s.begin(),s.end);
sort(t.begin(),t.end);
cout << (s==t?"yes\n":"no\n");
}
}

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

方法二:

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

 #include<iostream>
#include<fstream>
#include<algorithm>
using namespace std; int main()
{
ifstream in("string.txt");
for (string s, t; in >> s >> t;)
{
int sc1 = count(s.begin(), s.end(),'');
int sc0 = count(s.begin(), s.end(), '');
int tc1 = count(t.begin(), t.end(), '');
int tc0 = count(t.begin(), t.end(), '');
cout << (sc1==tc1&&sc0==tc0?"yes\n":"no\n");
}
}

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

方法三:

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

 #include<iostream>
#include<fstream>
#include<algorithm>
using namespace std; int main()
{
ifstream in("string.txt");
for (string s, t; in >> s >> t;)
{
int s1 = count(s.begin(), s.end(), '');
int t1 = count(t.begin(), t.end(), '');
cout << (s1==t1&&s.length()==t.length()?"yes\n":"no\n");
}
}

总结:

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

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

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

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

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

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

C++ code:判断字符串相等的更多相关文章

  1. lintcode:Unique Characters 判断字符串是否没有重复字符

    题目: 判断字符串是否没有重复字符 实现一个算法确定字符串中的字符是否均唯一出现 样例 给出"abc",返回 true 给出"aab",返回 false 挑战 ...

  2. js 正则判断字符串下划线的长度

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. C# 判断字符串为空有哪几种方法

    Length法:);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == ""); ...

  4. js判断字符串是否有下划线

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. el表达式判断字符串相等

    el表达式判断字符串相等 Java code 1 ${"a" == "a"}  ${"b" eq "b"}  都可以 & ...

  6. java判断字符串中是否含有汉字

    原文:http://www.open-open.com/code/view/1426332240717 判断字符串中是否含有汉字: String str = "test中文汉字"; ...

  7. IsNumeric 判断字符串是否为数字(使用Val函数实现),这个函数相当于Java的IsNaN函数

    IsNumeric 判断字符串是否为数字,如果是数字返回true,如果包含有汉字或字符的话返回false. 由于Delphi本身没有IsNumeric这个函数,不像其它语言,这个函数相当于Java的I ...

  8. C# 判断字符串是否是int/double

    using System.Text.RegularExpressions; /// <summary> /// 判断字符串是否是int/double /// </summary> ...

  9. C#判断字符串是否是数字

    /// <summary> /// 判断字符串是否是数字 /// </summary> public static bool IsNumber(string s) { if ( ...

  10. JS判断字符串长度的5个方法

    这篇文章主要介绍了JS判断字符串长度的5个方法,并且区分中文和英文,需要的朋友可以参考下 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符)   方法一:    代码如下: String.pr ...

随机推荐

  1. Exception in thread "main" java.util.InputMismatchException

    今天写代码来了一个异常 /** * 需求分析:根据输入的天数是否是周六或是周日, * 并且天气的温度大于28摄氏度,则外出游泳,否则钓鱼 * @author chenyanlong * 日期:2017 ...

  2. JavaScript中对象分类

    js的对象有三大类,内部对象(本地对象和内置对象).宿主对象和自定义对象 一.内部对象 1.本地对象,ECMAScript提供的需要实例化(new)才能使用的对象: Object.Function.A ...

  3. 标准遗传算法(实数编码 python实现)模拟二进制交叉SBX 多项式变异

    代码地址: https://github.com/guojun007/real_sga 本部分是采用实数编码的标准遗传算法,整体流程与上一篇二进制编码的基本一致, 主要区别在于本部分的交叉操作为模拟二 ...

  4. Spring的单例实现原理-登记式单例

    单例模式有饿汉模式.懒汉模式.静态内部类.枚举等方式实现,但由于以上模式的构造方法是私有的,不可继承,Spring为实现单例类可继承,使用的是单例注册表的方式(登记式单例). 什么是单例注册表呢, 登 ...

  5. 循环屏障CyclicBarrier以及和CountDownLatch的区别

    CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...

  6. codeforces - 432D Prefixes and Suffixes (next数组)

    http://codeforces.com/problemset/problem/432/D 转自:https://blog.csdn.net/tc_to_top/article/details/38 ...

  7. 正方体旋转demo

    接着上一篇博客的内容顺藤摸瓜往下想,既然stage有景深这个概念,可以表达3D场景,那么这个stage就可以呈现立体几何咯,于是自己写了个Cubic Demo 一个正方体有6个面,我们把一个正方体平铺 ...

  8. qemu基本使用

    1.qemu的安装 请参考家用路由器0day漏洞挖掘技术这本书 2.基本使用 qemu有主要如下两种运作模式: 用户模式(User Mode),亦称使用者模式.qemu能启动那些为不同中央处理器编译的 ...

  9. Aircrack-ng介绍

    1.介绍 Aircrack-ng主要使用了两种攻击方式进行WEP破解:一种是FMS攻击:一种是KoreK攻击. 2.主要组件 1.aircrack-ng 主要用于WEP及WPA-PSK密码的恢复,主要 ...

  10. 20155205 2016-2017-2 《Java程序设计》第5周学习总结

    20155205 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 如果没有try的话,出现异常会导致程序崩溃,而try则可以保证程序的正常运行下去.( ...