寻找Coder-统计一个字符串中另外一个子串的个数

题目描述

请设计一个高效算法,再给定的字符串数组中,找到包含"Coder"的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照"Coder"出现的次数递减排列,若两个串中"Coder"出现的次数相同,则保持他们在原数组中的位置关系。

给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的字符串。

测试样例:

["i am a coder","Coder Coder","Code"],3
返回:["Coder Coder","i am a coder"]
 1 bool cmp(const pair<string,int>p1,const pair<string,int>p2)
 2    {
 3         return p1.second>p2.second;
 4     }
 5 class Coder {
 6 public:
 7
 8     string tolower(string str)
 9     {
10         string ans=str;
11         for(int i=0;i<str.size();i++)
12         {
13             if(str[i]>=‘A‘&&str[i]<=‘Z‘)
14                 ans[i]=str[i]+32;
15         }
16         return ans;
17     }
18
19     vector<string> findCoder(vector<string> A, int n) {
20
21         // write code here
22         vector<pair<string,int>>ans;
23         vector<string>result;
24         for(int i=0;i<n;i++)
25         {
26             string str=tolower(A[i]);
27             int count=0;
28             int pos=str.find("coder");
29             while(pos!=-1)//这种find方法统计很好
30             {
31                 str=str.substr(pos+5);
32                 pos=str.find("coder");
33                 count++;
34             }
35             if(count!=0)
36                 ans.push_back(make_pair(A[i],count));
37         }
38         stable_sort(ans.begin(),ans.end(),cmp);
39         for(int i=0;i<ans.size();i++)
40             {
41             result.push_back(ans[i].first);
42         }
43         return result;
44     }
45 };
时间: 2024-10-26 15:01:20

寻找Coder-统计一个字符串中另外一个子串的个数的相关文章

编写一个程序,统计输入字符串中每一个小写英文字母出现的次数

import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/1 22:18 * @description: * @version:$ */ /*编写一个程序,统计输入字符串中每一个小写英文字母出现的次数*/ public class page0901 { public static void main(String[] args) { /*首先,输入一段字符串作为字符数组*/ System.out.p

sql 取出一个字符串中最后一个特殊字符的右边的字符

SQL如何取出一个字符串中最后一个特殊字符右边的字符,例如:10*20*300,怎样得到300? 使用reverse配合charindex来实现. reverse是把字符串倒置,然后通过charindex来获取倒置之后第一个*的位置,然后使用substring函数进行字符串截取,截取后再使用reverse倒置回来即可. 以下为例子 declare @str varchar(20) set @str = '10*20*300' select reverse(substring(reverse(@s

HDU 4622 求解区间字符串中的不同子串的个数

题目大意: 给定一个长度<2000的串,再给最多可达10000的询问区间,求解区间字符串中的不同子串的个数 这里先考虑求解一整个字符串的所有不同子串的方法 对于后缀自动机来说,我们动态往里添加一个字符,每次添加一个字符进去,我们只考虑那个生成的长度为当前长度的后缀自动机的节点 那么这个节点可接收的字符串的个数就是( p->l - p->f->l ),也就是以当前点为最后节点所能得到的与之前不重复的子串的个数 那么这个问题就很好解决了,共2000个位置,以每一个位置为起点构建一次后缀

计算一个字符串中每个字符出现的个数

需求:计算一个字符串中每个字符出现的次数 分析: 使用Scanner获取用户输入的字符串 创建Map集合,Key是字符串中的字符,value是字符的个数 遍历字符串,获取每一个字符 使用获取的字符,去Map集合判断key是否存在 key存在:通过字符(key),获取value(字符个数)value++ put(key,value )把新的value存储到Map集合中 key不存在:put(key,1) 遍历Map集合,输出结果 package day13; import java.util.Ha

Java实现统计某字符串在另一个字符串中出现的次数

面试时会经常考这样的题目,估计也不让使用正则表达式.还好这个算法还算简单,不过在草稿纸上写难免会出现运行异常,好吧,面试官赢了,乃们屌丝就实实在在的把代码码出来吧. 下面是实现代码: /** * 统计某字符串在另一个字符串中出现的次数 * * */ public class CountHit { public static void main(String[] args) { String a = "123456abcde6ab"; String b = "6abc"

统计一个字符串中的单词的个数,并打印各个单词

/*测试数据:Shen zhen is a beautiful city!*/ /*运行结果:Word:6 Shen zhen is a beautiful city!*/ #include<stdio.h> #define SIZE 1000 void wordCount(char *str) { int count = 0, flag = 0; char *p = str; while (*p != '\0'){ while (*p == 32){ if (*(p + 1) == 0){/

java循环练习:输入一个字符串,统计该字符串中分别包含多少个数字,多少个字母,多少个其他字符

package practiceGO; import java.util.Scanner; /*  * 3.输入一个字符串,统计该字符串中分别包含多少个数字,多少个字母,多少个其他字符  */ public class Cto { public static void main(String[] args) {         int englishCount = 0;// 英文字母个数         int spaceCount = 0;// 空格个数         int numCoun

字符串之“统计一个字符串中单词的个数”

题目:统计一个字符串中单词的个数 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开 输入:my name is jacky 输出:the number of word is 4 代码如下: #include <stdio.h> int main(int argc, char *argv[]) { char str[80]; int i=0,num=0,flag=0; char c; gets(str); while((c=str[i])!='\0') { if(c==' ') flag

黑马程序员——统计一个字符串中各个字符出现的次数

统计一个字符串中各个字符出现的次数 import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo { //统计一个字符串中相应字符出现的次数 public static void main(String[] args) { // String s = "aagfagdlkerjgavpofjmvglk我是你的"; //调用自定义方法来 统计相应字符出