如果两个字符串中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. non-member function cannot have cv-qualifier

    Q: non-member function unsigned int abs(const T&) cannot have cv-qualifier. template<typename ...

  2. GO语言的进阶之路-协程和Channel

    GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码 ...

  3. 学习windows编程 day3 之滚动条完善

    1.不再使用setscrollrange,setscrollpos,getscrollrange,getscrollpos这些函数,这只是有助于理解其中运行原理 2.改用setscrollinfo,g ...

  4. Hive记录-hive权限控制

    在使用Hive的元数据配置权限之前必须现在hive-site.xml中配置两个参数,配置参数如下: <property> <name>hive.security.authori ...

  5. 浏览器调用接口发现Provisional headers are shown

    一次请求时候报错 无论如何也找不到错误,后台接口和前端请求都是正确的.后来发现是 自己浏览器上装了广告拦截的插件 把我这个请求给拦截 果断卸载插件立马就好了.

  6. Java 学习札记(二)TomCat安装配置

    1.下载TomCat 下载地址:http://tomcat.apache.org/ 2.配置环境变量 CATALINA_HOME:F:\JAVA\apache-tomcat-6.0.18\apache ...

  7. geeksforgeeks-Array-Rotation and deletion

      As usual Babul is again back with his problem and now with numbers. He thought of an array of numb ...

  8. retrofit 使用解析

    retrofit 基础入门:https://www.jianshu.com/p/b64a2de066c3 retrofit 使用详解:https://blog.csdn.net/carson_ho/a ...

  9. 20165230田坤烨《网络对抗》Exp1 PC平台逆向破解

    实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...

  10. 【CXF】: No binding operation info while invoking unknown method with params unknown.

    CXF发布webservice之后访问报错: org.apache.cxf.interceptor.Fault: No binding operation info while invoking un ...