关闭

【PHP】给两个字符串返回字符串按排序出两个字符串的字符de多种解法

标签: php
974人阅读 评论(0) 收藏 举报
分类:

问题描述

给出两个字符串s1和s2,两个字符串仅包含a-z,返回一个排序后的字符串,包含这两个字符串的内容,每个字母只出现一次。

举例:

a = "xyaabbbccccdefww" b = "xxxxyyyyabklmopq" 
longest(a, b) -> "abcdefklmopqwxy"


a = "abcdefghijklmnopqrstuvwxyz" 
longest(a, a) -> "abcdefghijklmnopqrstuvwxyz"

分析&解决

涉及到的问题

  • 排序
  • 去重

按数组的方式

  1. 把两个字符串转化成数组
  2. 对数组进行去重和排序
function longest($a, $b) {
    //转化成数组
    $arr_a = str_split($a);
    $arr_b = str_split($b);
    //数组合并
    $arr_me = array_merge($arr_a,$arr_b);
    //数组去重
    $arr_me = array_unique($arr_me);
    //数组排序
    array_multisort($arr_me);
    //转换成字符串
    return  implode($arr_me);
}

count_chars()

count_chars() 函数返回字符串中所用字符的信息(例如,ASCII 字符在字符串中出现的次数,或者某个字符是否已经在字符串中使用过)。

count_chars(string,mode)

string  必需。规定要检查的字符串。
mode    
可选。规定返回模式。默认是 0。以下是不同的返回模式:
0 - 数组,ASCII 值为键名,出现的次数为键值
1 - 数组,ASCII 值为键名,出现的次数为键值,只列出出现次数大于 0 的值
2 - 数组,ASCII 值为键名,出现的次数为键值,只列出出现次数等于 0 的值
3 - 字符串,带有所有使用过的不同的字符
4 - 字符串,带有所有未使用过的不同的字符

这里用3

解决代码

function longest($a, $b) {
    return count_chars($a.$b, 3);
}

正则表达式

解决代码

function longest($a, $b) {
    $c = str_split($a.$b); sort($c); 
    $e = preg_replace('/(\w)\1+/', "$1", implode("", $c));
    return $e;
}

前面完成的还是之前的方法中的转化数组、排序数组的过程,正则表达式的作用是字符串的去重。

总结

  • 一个问题出现必定会有不同的解决思路
  • 条条大路通罗马
  • 大量数据计算下可以比较出哪种方法更快
0
0
查看评论

获取两个字符串之间最长公共字符串的算法(PHP)

算法1:  矩阵法  原理:字符串1:string1='aabbccdd'  字符串2:string2='accbbcdd'  用string1的每个字符与string2的每个字符相比较,相等写做1.不等写作0,则 如下所示:  第一行:10000000  第二行:10000000  第三行:000...
  • redrangon
  • redrangon
  • 2006-07-16 03:28
  • 1276

php截取某二个特殊字符串间的某段字符串

在php开发的过程中,有时候会用到截取某二个特殊字符串间的某个字符串,并对这个字符串做特殊的处理,那么对截取出来的字符串做什么特殊处理我们暂时不管,我们今天先讲php截取某二个特殊字符串间的某个字符串的方法,下面我们以截取[start]到[/end]之间的字符串,其中的代码如下:
  • u011986449
  • u011986449
  • 2014-10-24 20:14
  • 3628

笔试题 :查找两个字符串在一个字符串中出现的顺序

今天做某公司的在线笔试题,出现一个题目,意思是小明做车旅行时,途中醒了两次,每一次都看到了一些车站的颜色,用小写英文字母表示为两个字符串,现在同伴告诉小明整个过程中的所有车站的颜色排列,问是过去的途中还是回来的时候 抽象出来的意思是给三个字符串,str1,str2,str3,判断str2和str3...
  • qq_24877569
  • qq_24877569
  • 2016-09-10 23:11
  • 831

php-输入两个字符串,从第一字符串中删除第二个字符串中所有的字符

这道题目是好未来的笔试题,我是在牛客上看到的,因为对于php比较熟悉所以就用php试着解决一下,但是不知道是牛客在线编译系统的问题还是其他问题,我在自己本地的编译器上可以正常运行,但是在牛客上一直显示case率是25% 但是这个方法自我感觉是争取的,分享一下看看: 首先题目要求是从第一个...
  • hpu_yly_bj
  • hpu_yly_bj
  • 2017-07-29 17:01
  • 307

PHP之找任意两个字符串的最大相同部分

【题目背景】本题的题面是:输出任意两个字符串的最大相同部分。比如:字符串abcdsss和字符串sdcdsrf的最大相同部分是cds。 【题目解法】穷尽法  /** * 找两个字符串相同的部分 **/ function main($str1, $str2) { //将字符串转成数...
  • lifushan123
  • lifushan123
  • 2015-04-08 22:29
  • 1341

算法理解——字符串根据字典值排序

字符串根据字典值排序问题,就是指对给定的字符串,按照首字母的字典值排序,如果首字母相同的字符串,则按照第二个字母,依次内推,比如说 {"dog","dear","eye","bed"},排序后应该是{"b...
  • jinyongqing
  • jinyongqing
  • 2013-10-08 10:51
  • 10857

php截取指定两个字符之间字符串

/** * php截取指定两个字符之间字符串,默认字符集为utf-8 Power by 大耳朵图图 * @param string $begin 开始字符串 * @param string $end 结束字符串 * @param string $str 需要截取的字符串 * ...
  • qq_27229113
  • qq_27229113
  • 2017-12-27 11:07
  • 569

PHP截取两个指定字符中间的字符

实现的方法有很多种,在不考虑执行效率的情况下,这里贴出来一个最小白,但是最容易懂的方法:     $a = "123@abc#456";     $b= (strpos($a,"@"));    ...
  • wyqwclsn
  • wyqwclsn
  • 2014-10-09 14:17
  • 708

Java里两个字符串怎么通过“+”来实现的

我们知道,一旦申明一个String类型的变量,它就会指向一个对象,而当对这个变量进行修改时,这个变量就会指向一个新的对象。但是像StringBuffer,它并不会产生新的对象: StringBuffer sb = new StringBuffer(); sb.append("abc&qu...
  • u011976351
  • u011976351
  • 2017-06-06 16:41
  • 213

求两个字符串的交集

题目:给定两个字符串,求
  • XxuelangL
  • XxuelangL
  • 2014-10-01 20:22
  • 1679
    个人资料
    • 访问:640802次
    • 积分:9031
    • 等级:
    • 排名:第2476名
    • 原创:297篇
    • 转载:13篇
    • 译文:4篇
    • 评论:81条
    博客专栏
    微信订阅号
    欢迎加入QQ群
    玩家老黄历(微信小程序)
    谢谢支持~
    最新评论