(1)最长公共前缀
题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
-
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl” -
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。
- 解题方法:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(!strs.size()) return "";
int length=strs[0].size();//第一个元素长度
int count = strs.size();//数组长度
for(int i=0;i<length;i++){
char c=strs[0][i];
for(int j=1;j<count;j++){
if(strs[j][i]!=c||i==strs[j].size()) return strs[0].substr(0,i);
}
}
return strs[0];
}
};
(2)罗马数字转整数
- 解题方法:
class Solution {
public:
int romanToInt(string s) {
if(!s.size()) return -1;
int n =s.size();
int value=0;
for(int i=0;i<n;i++){
if(i+1<n){
if(m[s[i]]>=m[s[i+1]]){
value+=m[s[i]];
}
else{
value-=m[s[i]];
}
}else{
value+=m[s[i]];
}
cout<<value<<"---"<<endl;
}
return value;
}
private:
unordered_map<char,int>m={
{'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000}
};
};
(3)重复的DNA序列
- 题目:
所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。
-
示例 1:
输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
输出:[“AAAAACCCCC”,“CCCCCAAAAA”] -
示例 2:
输入:s = “AAAAAAAAAAAAA”
输出:[“AAAAAAAAAA”]
- 解题方法:
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
int n=s.size();
if(n<10)return {};
vector<string>res;
unordered_map<string,int>m;
for(int i=0;i<=n-10;i++){
string temp=s.substr(i,10);
m[temp]++;
}
for(auto it=m.begin();it!=m.end();it++){
if(it->second>1)res.push_back(it->first);
}
return res;
}
};