首页 > 编程语言 >用php找出字符串中连续重复次数最多的字符,你有方法吗?

用php找出字符串中连续重复次数最多的字符,你有方法吗?

时间:2024-05-06 09:33:58浏览次数:45  
标签:字符 arr max over len result str 字符串 php

 

找出字符串中连续重复次数最多的字符,这里总结了几种方法,不管是在开发中,还是在面试中都会遇到。

方法一

<?php 
$arr = str_split($str);
//字符串分隔到数组中

$arr = array_count_values($arr);
//用于统计数组中所有值出现的次数,返回一个数组

//键名为原数组的键值,键值为出数
arsort($arr);//按键值倒序
echo "";
print_r($arr);

 

 

 

方法二:

<?php 
$arr = str_split($str);
$con = array();

foreach ($arr as $v){

   if(!@$con[$v]){
      $con[$v]=1;
   }else{undefined

      $con[$v]++;
   }

}

arsort($con);
print_r($con);

 

 

 

方法三

<?php 
$arr = str_split($str);

$unique = array_unique($arr);
//移除数组中重复的值,并返回结果数组(键名不变);
print_r($unique);

foreach($unique as $v){undefined
   $arr2[$v] = substr_count($str,$v);
   //substr_count():计算某字符在字符串中出现的次数
}

arsort($arr2);
print_r($arr2);

 

 

 

》》》程序员福利《《《

例子:

PHP面试过程中经常遇到这类算法题目:

<?php 
//找出字符串中连续重复次数最多字
$str = 'bbcccychrisQxnnddemdereeeeeffetcsssssssssssssfggdddreggggaggaggaaadddddddddddddaass';
$str_arr = str_split($str);//字符串拆解为数组
$map_arr = array_flip($str_arr);//数组键值反转(反转后会自动去重)
$over_arr = [];//结果数组
foreach ($str_arr as $k => $v) {
    if ($k == 0 || $v != $str_arr[$k - 1]) {
        $map_arr[$v] = $v;
        continue;
    }
    $map_arr[$v] .= $v;
    if (!isset($over_arr[$v]) || strlen($over_arr[$v])         $over_arr[$v] = $map_arr[$v];
    }
}
$result = [];
$max_len = 0;
foreach ($over_arr as $key => $value) {
    $str_len = strlen($value);
    if ($max_len         $max_len = $str_len;
        $result = [
             $key => $str_len
        ];
    }
    if ($max_len == $str_len) {
        $result[$key] = $str_len;
        continue;
    }
    if ($max_len > $str_len) {
        continue;
    }
}
var_dump($over_arr,$result);

 

 

 

打印的结果如下:

 

https://www.shanhubei.com/archives/55316.html

标签:字符,arr,max,over,len,result,str,字符串,php
From: https://www.cnblogs.com/shanhubei/p/18174286

相关文章

  • Less11基于post提交的单引号闭合的字符型注入
    Less11基于post提交的单引号闭合的字符型注入一、手工注入1.判断注入点判断注入类型是否为数字型1or1=11or1=2发现页面显示相同,因此不是数字型判断注入类型是否为字符型1'or1=1#1'or1=2#发现1=2页面异常报错,1=1正常。所以是单引号字符型闭合。2.爆破字段......
  • 数据类型之字符串
    1、字符串的定义单引号,双引号引起来的2、字符串的索引和切片和转义2.1索引:1.索引值从0开始索引超长会报错IndexError:stringindexoutofrange2.写法:str[0]2.2切片:1.[起始下标:终止下标:步长]:起始下标默认为0,步长默认为12.取头不取尾,左开右闭3.步长为正数,正......
  • PHP-数据对象学习手册(全)
    PHP数据对象学习手册(全)原文:zh.annas-archive.org/md5/33ff31751d56930c46ef1daf9ca0ebcb译者:飞龙协议:CCBY-NC-SA4.0前言本书将向您介绍PHP5.0版本开始提供的最重要的扩展之一——PHP数据对象,通常称为PDO。PHP由于其简单性和易用性而成为非常流行的Web编程语言......
  • PHP-入门指南(全)
    PHP入门指南(全)原文:zh.annas-archive.org/md5/d36bde355b2574844946c8150420db7b译者:飞龙协议:CCBY-NC-SA4.0前言开发网站是当今的优先事项,以便您的业务在互联网上有所存在。设计和开发是任何网站的基础步骤。PHP通常用于网站和Web应用程序开发。PHP是一种通用的服务......
  • 使用-PHP-和-jQuery-构建游戏化-Web-站点(全)
    使用PHP和jQuery构建游戏化Web站点(全)原文:zh.annas-archive.org/md5/a9c92181e14a72b81ed3a8d14d6790a1译者:飞龙协议:CCBY-NC-SA4.0前言几年前,如果你对某人说“游戏化”,你会得到一个奇怪的表情,好像你在编造一些新东西。也许你会得到一个快速的跟进问题:“嗯?那是什么?”......
  • [leetcode 87 扰乱字符串] [剪枝搜索]
    importjava.util.HashMap;importjava.util.Map;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();booleanres=solution.isScramble("eebaacbcbcadaaedceaaacadccd","eadcaacabad......
  • 代码随想录算法训练营第11天 | 栈与队列 20.有效的括号 1047.删除字符串中的所有相邻
    leetcode20.有效的括号题目20.有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。解题思路实现代码leetcod......
  • 指针实现字符串匹配
    #include<stdio.h>voidcomp(char*sub,char*str){inti=0,j=0;//通过子串指针移动的次数等于字串的长度,实现匹配成功与否//下面代码是直接使用子串和主串是否同时用完子串长度的循环实现while(*str){for(i=0;*(sub+i)==*(str+i);i++)//判断子串......
  • C# String.Split 将字符串按照指定的分隔符分割成一个字符串数组
    以下两种方式都可以分割字符串string[]arr=s.Split('\n');string[]arr=s.Split(newchar[]{'\n'},StringSplitOptions.RemoveEmptyEntries);区别:string[]arr=s.Split('\n');:这种方式使用单个字符作为分隔符,将字符串s按照换行符('\n')进行分割。但是,此......
  • 2024-05-04:用go语言,给定一个起始索引为0的字符串s和一个整数k。 要进行分割操作,直到字
    2024-05-04:用go语言,给定一个起始索引为0的字符串s和一个整数k。要进行分割操作,直到字符串s为空:选择s的最长前缀,该前缀最多包含k个不同字符;删除该前缀,递增分割计数。如果有剩余字符,它们保持原来的顺序。在操作之前,可以修改字符串s中的一个字符为另一个小写英文字母。在最佳情......