`
Tony小熊
  • 浏览: 35077 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

腾讯面试题解法

    博客分类:
  • php
阅读更多
腾讯一道经典的面试题,我的解法思路是利用栈的原理作<em>和</em>的匹配判断,入栈时记录对应在输出数组里面的索引值,把不是<em>和</em>的正常字符存入输出数组中,索引值累加。如索引值已超过要求的长度,则遍历中断。

最后还留在栈里面的值就是要删除的没有配对的<em>,进行删除,最后输出正确的字符串。


/**
题目是:
假设有"123<em>abc</em>456<em>def</em>789"这么一个字符串,写一个函数,可以传入一个字符串,和一个要截取的长度。返回截取后的结果。

要求:
1 <em>和</em>标记不得计算在长度之内。
2 截取后的字符串,要保留原有<em>标签,不过如果最后有一个标签没有闭合,则去掉其开始标签。

示例:
题中的字符串,要截取长度5,则返回的字符串应该为:123ab,要截取长度8,应返回123<em>abc</em>45。

*/

/**
@author Tony
@blog http://fengweihong.iteye.com/
@date 2010-08-19
*/

function substr_new($string, $length) {
	$str = str_replace(array('<', '>'), array(',<', '>,'), $string);
	$array = explode(',', $str);
	$echo = $stack = array();
	$i = $j = 0;

	foreach ($array as $v) {

		if ($v == '<em>') {
			$stack[] = array('index' => $j, 'value' => $v);
			$echo[$j] = $v;
		} elseif ($v == '</em>') {
			array_pop($stack);
			$echo[$j] = $v;
		} else {
			$strlen = strlen($v);
			if ($i + $strlen > $length) {
				$strlen = min($length - $i, $strlen);
				$echo[$j] = substr($v, 0, $strlen);
			} else {
				$echo[$j] = $v;
			}

			$i += $strlen;
		}

		$j++;

		if ($i >= $length) {
			break;
		}

	}

	foreach ($stack as $v) {
		unset($echo[$v['index']]);
	}

	return implode('', $echo);
}


$string = '123<em>abc</em>456<em>def</em>789';
var_dump(substr_new($string, 8));
分享到:
评论

相关推荐

    腾讯面试题

    ### 腾讯面试题知识点解析 #### 一、32位机上的数据类型与转换问题 **题目描述**: 在32位机器上,给定以下代码: ```c++ signed char a = 0xe0; unsigned int b = a; unsigned char c = a; ``` 判断下列选项中...

    hadoop2面试题 -2012年腾讯招聘实习生笔试题.pdf

    ### Hadoop2面试题解析——腾讯2012年实习生招聘笔试题 #### 题目背景 在2012年的腾讯实习生招聘过程中,出现了一道关于数组处理的编程题,该题目不仅考验应聘者的算法基础,还对其数据结构理解和编程能力提出了较...

    腾讯考试题.docx

    【腾讯云题库】这份资料包含了多个不同领域的知识点,涵盖了逻辑推理、数学问题、概率计算、计算机编程和数据结构等多个方面。以下是对这些知识点的详细解释: 1. **内存限制下的整数查找**:这是一个典型的计算机...

    腾讯笔试试题整理(包括答案)

    ### 腾讯笔试知识点详解 ... - 对于附加题,思考问题背后的逻辑和实现方法,而不仅仅是寻求一种解法。 以上就是基于“腾讯笔试试题整理(包括答案)”文件中的知识点总结,希望能够帮助到准备参加腾讯笔试的朋友们。

    程序员面试题精选100题.doc

    腾讯面试题:统计每个数字在数组中出现的次数 **知识点概述**: 本题要求根据上排给出的十个数,在下排填写对应数字出现的次数。 **解决方案**: 1. **初始化数组**:创建一个大小为10的数组,用于记录每个数字...

    BAT经典面试题100道.pdf

    这份文件是关于BAT(百度、阿里巴巴、腾讯)公司的经典面试题集,包含了多个方面的技术问题,覆盖算法、C/C++基础、智力题以及概率题和操作系统题等。接下来我将详细解释这些知识点: ### 算法部分知识点 1. **...

    微软等数据结构+算法面试100题全部答案

    - 数据结构和算法面试题是评估求职者基础技能的重要工具。 - 通过解答这类题目,可以检验求职者对基本概念的理解、逻辑思维能力以及问题解决技巧。 - 对于想要进入顶级科技公司工作的求职者来说,掌握这些题目及其...

    BAT常见的面试问题及其解答

    在BAT(百度、阿里巴巴、腾讯)的面试过程中,面试官常常会提出一系列具有挑战性的技术问题,以评估候选人的编程思维、算法理解以及问题解决能力。以下是一些常见面试题目的详细解答: 1. **台阶问题/斐波那契数列*...

    世界500强面试题.pdf

    第一篇 面试题 ................................................................................ 8 1.1. 简介 ................................................................................................

    剑指offer第二版完整java版

    这本书针对腾讯、阿里巴巴、百度等一线互联网公司的面试要求,整理了大量的面试题及答案,涵盖了数组、字符串、链表、树、二叉树、图、动态规划等多个领域的算法和编程技巧。其核心在于提供解题思路和最佳实践,帮助...

    大厂算法和数据结构刷题班.zip

    在"大厂"(通常指阿里巴巴、腾讯、百度、字节跳动等知名互联网公司)的面试中,算法和数据结构是考察候选人技术实力的重要部分。面试官通常会通过编程题来测试候选人在实际场景中应用这些知识的能力。例如,可能会...

Global site tag (gtag.js) - Google Analytics