2024.09.10深信服
1. 三色石头
桌子上放了一排石头,有n个,每块石头的颜色可以是红色,绿色或蓝色。
现在要从这排石头取出的数个石头,以便剩余的石头里面,任何两颗相邻的石头具有不同的
颜色的(取出1块石头后,就认为两边的石头是相邻的)。
请根据输入的石头数量、排序和颜色,计算最少要取出几块石头?
贪心打卡题
int main() {
int n;
cin>>n;
string s;
cin>>s;
int res = 0;
for(int i=1;i<n;i++)//保留第一块
if(s[i]==s[i-1]) res++;
cout<<res<<endl;
return 0;
}
2. 验证DNS域名
验证一个字符串是否是合法的DNS域名。DNS域名的格式要求如下:
1)域名由一系列以点分隔的标签组成。每个标签最长可为63个字节。域名的总长度不能超
过 255 字节,包括点。域名至少由2个标签组成。
2)域名标签只能包含字符 a-z、A-Z、0-9 和-(连字符)。不能在标签开头或结尾指定连字
符。域名支持大小写,但是不区分大小写。
简单模拟题
bool judge(string &s){
unordered_set<char> st;
for(char c='a';c<='z';c++)
st.insert(c);
for(char c='A';c<='Z';c++)
st.insert(c);
for(char c='0';c<='9';c++)
st.insert(c);
st.insert('-');
st.insert('.');
int n = s.size();
if(s.size()>255){
cout<<"整体超出长度"<<endl;
return false;
}
if(s[0]=='-'||s[n-1]=='-') return false;
for(auto c:s){
if(st.count(c)==0){
cout<<"含有非法字符"<<c<<endl;
return false;
}
}
stringstream ss(s);
string cur;
while(getline(ss,cur,':')){
cout<<cur<<endl;
if(cur.size()>63) return false;
}
return true;
}
int main() {
string s;
cin>>s;
if(judge(s)) cout<<"true";
else cout<<"false";
return 0;
}
3. 木材拼接
现在有一批长度不同的木材woods,现在需要将木材进行拼接,正好达到总长度length,在不考虑切割木材,
并且每种长度的木材不限量供应情况下,返回满足要求的最少木材数量,如果无法通过组合达到规定长度,则返回-1。
简单背包问题
int main() {
int n;
cin>>n;
vector<int> woods(n);
for(int i=0;i<n;i++)
cin>>woods[i];
int len;
cin>>len;
vector<int> dp(len+1,INT_MAX/2);//dp[i]表示达到长度i需要的最少木材
dp[0] = 0;
for(auto wood:woods)//枚举木材,每个可以使用无限次
for(int i=wood;i<=len;i++){
dp[i] = min(dp[i],dp[i-wood]+1);
}
if(dp[len]==INT_MAX/2) cout<<-1<<endl;
else cout<<dp[len]<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2023-09-11 字符串转换
2022-09-11 LeetCode/雇佣K名工人的最低成本