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

2014百度校招笔试题

二、算法与程序设计题(本题共45分)

1. 使用C/C++编写函数,实现字符串反转,要求不使用任何系统函数,且时间复杂度最小,函数原型:char* reverse_str(char* str)。(15分)

算法实现:

/*实现字符串翻转*/
char* reverse_str(char* str)
{
	if(NULL == str) //字符串为空直接返回
	{
		return str;
	}
	char *begin;
	char *end;
	begin = end = str;

	while(*end != '\0') //end指向字符串的末尾
	{
		end++;
	}
	--end;

	char temp;
	while(begin < end) //交换两个字符
	{
		temp = *begin;
		*begin = *end;
		*end = temp;
		begin++;
		end--;
	}

	return str; //返回结果
}
void main()
{
	char str[] = "123456";
	printf(reverse_str(str));
}

2. 给定一个如下格式的字符串,(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。(15分)

分析:此题实际上考的是站的应用,即曾经练过的括号匹配问题。

算法实现:

#include <stdio.h>
#include <STACK>
using namespace std;

/*判断表达式是否合法*/
bool IsValid(char *str)
{
	if(NULL == str) return false;

	stack<char> op;

	while(*str)
	{
		if(*str == '(')
		{
			op.push(*str++);
		}
		else if(*str == ')')
		{
			if(op.empty())
				return false;
			else
				op.pop();
			str++;
		}
		else
		{
			str++;
		}
	}

	if(op.empty())
		return true;
	else
		return false;
}
/*消除中间的括号*/
char *Elimination_brackets(char *str)
{
	if(str == NULL)  //字符串为空返回
		return str;  
	
	char* temp = new char[strlen(str)+1];  
	char* result = temp;  
	
	*temp++ = *str++; //跳过第一个左括号
	while(*str!='\0')  
	{  
		if(*str == ')' || *str=='(')  //有括号,跳过赋值
		{  
			str++;  
			continue;  
		}  
		*temp++ = *str++;  
	}  
	*temp++ = ')';  //将有括号加上
	*temp = '\0';  
	
	return result;  
	
}
void main()
{
	  char str[] = "(1,(1,0),3)";
	  int a = 0;
	  if(IsValid(str))
	  {
		  printf(Elimination_brackets(str));
	  }

}


相关文章:

  • 从程序员到项目经理:认识项目经理
  • Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)...
  • 每天一道算法_2_求高精度幂
  • 【总结】android程序不显示图标,开机自动启动?我来告诉你
  • 完美洗牌算法学习
  • 关于完美洗牌算法中圈和圈起点的一个证明
  • 关于完美洗牌问题的若干思考
  • 木块砌墙
  • Google的一个面试题——数组原地置换
  • linux hostname命令学习
  • 程序锁的核心基本原理
  • 每天一道算法_3_487-3279_对电话号码格式化统计批处理
  • linux编译和运行一个可执行文件初学篇
  • 关于转义字符的学习
  • 黑马程序员_装饰设计模式
  • python3.6+scrapy+mysql 爬虫实战
  • 【Linux系统编程】快速查找errno错误码信息
  • 【前端学习】-粗谈选择器
  • Apache的80端口被占用以及访问时报错403
  • Java 23种设计模式 之单例模式 7种实现方式
  • Koa2 之文件上传下载
  • PAT A1017 优先队列
  • Python_OOP
  • ubuntu 下nginx安装 并支持https协议
  • underscore源码剖析之整体架构
  • webpack+react项目初体验——记录我的webpack环境配置
  • yii2中session跨域名的问题
  • 如何学习JavaEE,项目又该如何做?
  • 入口文件开始,分析Vue源码实现
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 系统认识JavaScript正则表达式
  • 再谈express与koa的对比
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)Hibernate的二级缓存
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十六)串口UART
  • (五)MySQL的备份及恢复
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转载)Google Chrome调试JS
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET中的十进制浮点类型,徐汇区网站设计
  • 。Net下Windows服务程序开发疑惑
  • @ComponentScan比较
  • @property python知乎_Python3基础之:property