当前位置:首页 > 教育资讯

[Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位]

Leetcode-748.最短补全词

题目:给你一个字符串licensePlate和一个字符串数组words,请你找出words中的最短补全词。

补全词是一个包含licensePlate中所有字母的单词。忽略licensePlate中的数字和空格。不区分大小写。

如果某个字母在licensePlate中出现不止一次,那么该字母在补全词中的出现次数应当一致或者更多。

例如:licensePlate=“aBc12c”,那么它的补全词应当包含字母‘a’、‘b’(忽略大写)和两个‘c’。可能的补全词有“abccdef”、“caaacab”以及“cbca”。

请返回words中的最短补全词。题目数据保证一定存在一个最短补全词。当有多个单词都符合最短补全词的匹配条件时取words中第一个出现的那个。

示例1:

输入:licensePlate=“1s3PSt”,words=[“step”,“steps”,“stripe”,“stepple”]

输出:“steps”

解释:最短补全词应该包括“s”、“p”、“s”(忽略大小写)以及“t”。

“step”包含“t”、“p”,但只包含一个“s”,所以它不符合条件。

“steps”包含“t”、“p”和两个“s”。

“stripe”缺一个“s”。

“stepple”缺一个“s”。

因此,“steps”是唯一一个包含所有字母的单词,也是本例的答案。

示例2:

输入:licensePlate=“1s3456”,words=[“looks”,“pest”,“stew”,“show”]

输出:“pest”

解释:licensePlate只包含字母“s”。所有的单词都包含字母“s”,其中“pest”、“stew”、和“show”三者最短。

答案是“pest”,因为它是三个单词中在words里最靠前的那个。

提示:

1<=licensePlate.length<=7

licensePlate由数字、大小写字母或空格’’组成

1<=words.length<=1000

1<=words[i].length<=15

words[i]由小写英文字母组成

思路:思路是先统计licensePlate中的字母出现的次数,不管大小写,用hash数组统计;然后在words数组中也另外定义一个temp数组统计第i个字符串中的字母出现的次数;当hash数组中的某一个数比temp数组中对应的数大,即licensePlate中某一个字母出现的次数比words中第i个字符串对应字母出现的次数多,说明当前words中第i个字符串不符合题意;否则一直遍历hash数组,如果hash数组中的值都小于或等于temp数组中的值,即说明当前字符串符合题意,记录此下标;注意在记录下标前,还要比较当前字符串与上一个记录的字符串的长度,取长度较小的字符串;

char*shortestCompletingWord(char*licensePlate,char**words,intwordsSize){//定义一个数组并初始化为0//index为返回字符串在words中的下标inthash[26]={0};intindex=-1;//将licensePlate中的字母找出来,统计字母出现的次数,不管大小写for(inti=0;i='A'&&licensePlate[i]<='Z'){hash[licensePlate[i]-'A']++;}elseif(licensePlate[i]>='a'&&licensePlate[i]<='z'){hash[licensePlate[i]-'a']++;}}//i和j访问words中字符串的第j个字母for(inti=0;i

Leetcode-762.二进制表示中质数个计算置位

题目:给你两个整数left和right,在闭区间[left,right]范围内,统计并返回计算置位位数为质数的整数个数。

计算置位位数就是二进制表示中1的个数。

例如,21的二进制表示10101有3个计算置位。

示例1:

输入:left=6,right=10

输出:4

解释:

6->110(2个计算置位,2是质数)

7->111(3个计算置位,3是质数)

9->1001(2个计算置位,2是质数)

10->1010(2个计算置位,2是质数)

共计4个计算置位为质数的数字。

示例2:

输入:left=10,right=15

输出:5

解释:

10->1010(2个计算置位,2是质数)

11->1011(3个计算置位,3是质数)

12->1100(2个计算置位,2是质数)

13->1101(3个计算置位,3是质数)

14->1110(3个计算置位,3是质数)

15->1111(4个计算置位,4不是质数)

共计5个计算置位为质数的数字。

提示:

1<=left<=right<=10^6

0<=right-left<=10^4

思路:思路是先统计这个数的二进制中有多少个1,用ans统计,然后判断ans是否是质数,是则返回true,否则返回false;

//判断是否是质数boolisPrime(inttemp){//1和2不是质数if(temp<2)returnfalse;//质数是只可以被1和本身整除的数字for(inti=2;i>j&1==1)ans++;}//判断ans是否是质数,是则ret统计返回的答案if(isPrime(ans))ret++;}returnret;}

本文来自网络,不代表教育资讯立场,转载请注明出处。