C++ code:判断字符串相等
如果两个字符串中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:判断字符串相等的更多相关文章
- lintcode:Unique Characters 判断字符串是否没有重复字符
题目: 判断字符串是否没有重复字符 实现一个算法确定字符串中的字符是否均唯一出现 样例 给出"abc",返回 true 给出"aab",返回 false 挑战 ...
- js 正则判断字符串下划线的长度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C# 判断字符串为空有哪几种方法
Length法:);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == ""); ...
- js判断字符串是否有下划线
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- el表达式判断字符串相等
el表达式判断字符串相等 Java code 1 ${"a" == "a"} ${"b" eq "b"} 都可以 & ...
- java判断字符串中是否含有汉字
原文:http://www.open-open.com/code/view/1426332240717 判断字符串中是否含有汉字: String str = "test中文汉字"; ...
- IsNumeric 判断字符串是否为数字(使用Val函数实现),这个函数相当于Java的IsNaN函数
IsNumeric 判断字符串是否为数字,如果是数字返回true,如果包含有汉字或字符的话返回false. 由于Delphi本身没有IsNumeric这个函数,不像其它语言,这个函数相当于Java的I ...
- C# 判断字符串是否是int/double
using System.Text.RegularExpressions; /// <summary> /// 判断字符串是否是int/double /// </summary> ...
- C#判断字符串是否是数字
/// <summary> /// 判断字符串是否是数字 /// </summary> public static bool IsNumber(string s) { if ( ...
- JS判断字符串长度的5个方法
这篇文章主要介绍了JS判断字符串长度的5个方法,并且区分中文和英文,需要的朋友可以参考下 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: 代码如下: String.pr ...
随机推荐
- python 数据类型 datatype
python 数据类型 datatype 列表list 元组tuple 集合set 字典dictionary 字符串string 一.列表list list :python的一种数据类型.是可变的, ...
- Linux命令之mkdir
mkdir命令 用处:创建文件夹 用法:在终端中输入mkdir加上文件夹的名字 示例: (我想创建一个名字为shuyunquan的文件夹)
- Hibernate的实体类中为什么要继承Serializable?
确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以有各自 不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以 ...
- 学习windows编程 day6 之处理鼠标移动
#define POINT_MAX 1000 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara ...
- 关于spring事务
https://www.cnblogs.com/caoyc/p/5632963.html 这一篇博客讲的很清楚,一些参数和事务的概念 在serveice层中 每个方法都要写上关于事务的注解.这两个 ...
- Hive记录-加载文件进行查询操作
Hive可以运行保存在文件里面的一条或多条的语句,只要用-f参数,一般情况下, 保存这些Hive查询语句的文件通常用.q或者.hql后缀名,但是这不是必须的, 你也可以保存你想要的后缀名.假设test ...
- VMware虚拟机Mac OS X无法调整扩展硬盘大小的解决方案(转)
使用VMware虚拟机搭建的MacOSX,在10.10以上可能会出现无法扩充磁盘大小的问题. 因为很多朋友在初次安装MacOSX的时候都默认选择40G的磁盘大小,结果用了没两天之后就发现磁盘不够用了. ...
- MyBatis参数传递
一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...
- C# 密封类使用sealed修饰
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace @sea ...
- dbeaver can't connect HBase1.2 using phoenix driver #1863
1 第一个问题 Unexpected version format: 10.0.2 Unexpected version format: 10.0.2 Unexpected version forma ...