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 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