作者:mobiledu2502920033 | 来源:互联网 | 2023-09-18 15:17
字符串拼接处理要求:abbaaaaa;aabbccccbbaaaabbbbaa;这是今天一个朋友问我的一个面试题,看题目应该是考字符串处理,下午写了一半没写完,吃完饭脑子还在
字符串拼接处理 要求: ab+ba+aa = aa; aabbcc+ccbbaa=aabbbbaa; 这是今天一个朋友问我的一个面试题, 看题目应该是考字符串处理,下午写了一半没写完, 吃完饭脑子还在想着这件事, 现在闲下来也跟着练练手.
思路分析: 三个字符串拼接, 前后相同部分移除, 下面是考题原话 需要特别注意的是,拼接过程中重复的部分是相对前面已经拼接了的字符串而言的
刚审题时也有很多奇怪想法, 后来仔细思考了下, 先不说这个算法写出来能干啥使, 就本题而言, 实际计算过程其实关键点只有两步 这里假设三个字符串分别为: A , B , C 用B的第一位对比A的最后一位, 相同则A和B均把此字符剔除 提出B的第一个字符做一个flag, 遍历向下对比时要判断下一个字符是否与我立的flag相同,相同则继续执行,否则跳出 继续第四步, 用B的第二位对比A的倒数第二位,相同则剔除 重复456, 5应该放在第一步吧, 实际步骤是: 546; 处理完成后,得到的结果应为N个输入的字符串, 相加即可得到答案 实例代码 function merge ( . . . $str ) { $num = func_num_args ( ) ; $list = func_get_args ( ) ; foreach ( $list as $k = > $v ) { if ( isset ( $list [ $k + 1 ] ) ) { $a = str_split ( $list [ $k ] ) ; $b = str_split ( $list [ $k + 1 ] ) ; $flag = $b [ 0 ] ; $a_unset = [ ] ; $b_unset = [ ] ; foreach ( $b as $k1 = > $v1 ) { $a_k = count ( $a ) - 1 - $k1 ; if ( $v1 != $flag ) break ; if ( $v1 == $a [ $a_k ] ) { $a_unset [ ] = $a_k ; $b_unset [ ] = $k1 ; } } foreach ( $a_unset as $ka = > $va ) { unset ( $a [ $va ] ) ; } foreach ( $b_unset as $kb = > $vb ) { unset ( $b [ $vb ] ) ; } $list [ $k ] = implode ( '' , $a ) ; $list [ $k + 1 ] = implode ( '' , $b ) ; } } $res = '' ; foreach ( $list as $key = > $value ) { $res . = $value ; } return $res ; } $res = merge ( 'ab' , 'ba' , 'aa' ) ; var_dump ( $res ) ;
代码只是做了两个验证证明结果, 没有继续优化 至于实用性嘛… 算了, 考题哪有实用性这一说… 仅此记录.