c++实现方式
- 借助STL标准库中map数据结构,字符串数组中,某个字符串出现次数最多
#include <string>
#include<algorithm>
#include <vector>
#include <map>
static void splitValue(const std::string& s, std::vector<std::string>& tokens, char delim = ' ') {
tokens.clear();
auto string_find_first_not = [s, delim](size_t pos = 0) -> size_t {
for (size_t i = pos; i < s.size(); i++) {
if (s[i] != delim) return i;
}
return std::string::npos;
};
size_t lastPos = string_find_first_not(0);
size_t pos = s.find(delim, lastPos);
while (lastPos != std::string::npos) {
tokens.emplace_back(s.substr(lastPos, pos - lastPos));
lastPos = string_find_first_not(pos);
pos = s.find(delim, lastPos);
}
}
bool cmp(const std::pair<std::string, int> &a, const std::pair<std::string, int> &b)//也可以用结构体
{
return a.second > b.second;
}
int getSortedNumString(std::vector<std::string> vInput){
std::map<std::string, int> mapResult;
for(size_t i=0;i<vInput.size();i++){
mapResult[vInput[i]]++;
}
mapResult.insert(std::pair<std::string,int>("nihao",4));
std::map<std::string, int>::iterator item;
for(item=mapResult.begin(); item!=mapResult.end(); item++){
printf("%s, %d\n",item->first.c_str(),item->second);
}
printf("%zd\n",mapResult.size());
std::vector<std::pair<std::string,int>> mpp(mapResult.begin(),mapResult.end());//用map对该容器初始化
std::sort(mpp.begin(),mpp.end(),cmp);//用sort排序
for(size_t i=0;i < mpp.size();i++){
printf("%s, %d\n",mpp[i].first.c_str(),mpp[i].second);
}
return 0;
}
int main(){
const char* p[] = {"11101","2512","12145","bac","11101","2512","11101"};
//initialize the vector value
std::vector<std::string> vString(p,p+7);
getSortedNumString(vString);
// const char* points = "12,56,75,15,12.0,14.0,16.0,19.0";
// std::vector<std::string> tokens;
// splitValue(points, tokens,',');
// for (size_t i = 0; i < tokens.size(); i++) {
// printf("%s\t",tokens[i].c_str());
// }
const std::vector<int> input = {1, 3, 64, 64};
const std::map<std::string, std::vector<int>> map_input = {{"image", min_input_shape}};
return 0;
}
python实现方式
# coding: utf-8
import sys
import os
import math
def getMaxLengthstr(input_str_list):
extract_dict = {}
for item in input_str_list:
if item not in extract_dict:
extract_dict[item ] = 1
else:
extract_dict[item ] +=1
if len(extract_dict) > 0:
sorted_result = sorted(extract_dict.keys(), key=lambda x:extract_dict[x], reverse=True)
for item in sorted_result:
print("%s ---> %d\n"%(item, extract_dict[item]))
return sorted_result[0]
else:
return None
字符串某个字符的子串出现次数最多
- 给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数:
子串中不同字母的数目必须小于等于 maxLetters 。
子串的长度必须大于等于 minSize 且小于等于 maxSize 。
示例 1:
输入:s = “aababcaab”, maxLetters = 2, minSize = 3, maxSize = 4
输出:2
解释:子串 “aab” 在原字符串中出现了 2 次。
它满足所有的要求:2 个不同的字母,长度为 3 (在 minSize 和 maxSize 范围内)。
#include <string>
#include<algorithm>
#include <vector>
#include <unordered_map>
int lengthOfLongestSubstring(string s) {
int res = 0, left = -1, n = s.size();
unordered_map<int, int> m;
for (int i = 0; i < n; ++i) {
if (m.count(s[i]) && m[s[i]] > left) {
left = m[s[i]];
}
m[s[i]] = i;
res = max(res, i - left);
}
return res;
}
int main(){
std::string s = "aababcaab";
lengthOfLongestSubstring(s);
return 0;
}