C/C++每日一练(20230303)
创始人
2024-05-27 20:12:12
0

目录

1. 字符串相乘

2. 单词拆分 II

3. 串联所有单词的子串


1. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理

代码:

#include 
using namespace std;class Solution
{
public:string multiply(string num1, string num2){string res(num1.length() + num2.length(), '0');for (int i = num2.length() - 1; i >= 0; i--){int j, carry = 0;for (j = num1.length() - 1; j >= 0; j--){carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j + 1] - '0');res[i + j + 1] = carry % 10 + '0';carry /= 10;}res[i + j + 1] = carry + '0';}int i;for (i = 0; i < res.length() - 1; i++){if (res[i] != '0'){break;}}return res.substr(i);}
};int main()
{Solution s;cout << s.multiply("2", "3") << endl;cout << s.multiply("123", "456") << endl;return 0;
} 

输出:

6
56088 


2. 单词拆分 II

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。

说明:

  • 分隔时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。

示例 1:

输入: s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]
输出: ["cats and dog", "cat sand dog"]

示例 2:

输入: s = "pineapplepenapple"
wordDict = ["apple", "pen", "applepen", "pine", "pineapple"]
输出: ["pine apple pen apple", "pineapple pen apple", "pine applepen apple"]
解释: 注意你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog"
wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: []

代码:

#include 
using namespace std;class Solution
{
public:vector res;unordered_set wordset;unordered_set lenset;vector wordBreak(string s, vector &wordDict){for (const auto &w : wordDict){wordset.insert(w);lenset.insert(w.size());}vector dp(s.size() + 1, 0);dp[0] = 1;for (int i = 1; i <= s.size(); ++i){for (const auto &j : lenset){if (i >= j && dp[i - j] && wordset.count(s.substr(i - j, j)))dp[i] = 1;}}if (dp.back() == 0)return res;backtrack(dp, 0, s, "");return res;}void backtrack(vector &dp, int idx, string &s, string tmp){if (idx == s.size()){tmp.pop_back();res.push_back(tmp);return;}for (int i = idx + 1; i < dp.size(); ++i){if (dp[i] == 1 && wordset.count(s.substr(idx, i - idx))){backtrack(dp, i, s, tmp + s.substr(idx, i - idx) + " ");}}}
};int main()
{Solution sol1;string s = "catsanddog";vector wordDict = {"cat", "cats", "and", "sand", "dog"};for (auto word:sol1.wordBreak(s, wordDict))cout << word << endl;Solution sol2;s = "pineapplepenapple";wordDict = {"apple", "pen", "applepen", "pine", "pineapple"};for (auto word:sol2.wordBreak(s, wordDict))cout << word << endl;Solution sol3;	s = "catsandog";wordDict = {"cats", "dog", "sand", "and", "cat"};for (auto word:sol3.wordBreak(s, wordDict))cout << word << endl;return 0;
} 

输出:

cats and dog
cat sand dog
pine apple pen apple
pineapple pen apple
pine applepen apple
   # 此行空


3. 串联所有单词的子串

给定一个字符串 和一些长度相同的单词 words。找出 中恰好可以由 words 中所有单词串联形成的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

示例 1:

输入:  s = "barfoothefoobarman",  words = ["foo","bar"]
输出:[0,9]
解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出的顺序不重要, [9,0] 也是有效答案。

示例 2:

输入:  s = "wordgoodgoodgoodbestword",  words = ["word","good","best","word"]
输出:[]

代码:

#include 
using namespace std;
class Solution
{
public:vector findSubstring(string s, vector &words){vector res;if (s.empty() || words.empty()){return res;}unordered_map ht;for (const auto &w : words){ht[w]++;}int len = words[0].length();for (int i = 0, j = 0; i < s.length() - words.size() * len + 1; i++){unordered_map counting;for (j = 0; j < words.size(); j++){string word = s.substr(i + j * len, len);if (++counting[word] > ht[word]){break;}}if (j == words.size()){res.push_back(i);}}return res;}
};int main()
{Solution sol1;string s = "barfoothefoobarman";vector words = {"foo","bar"};for (auto word:sol1.findSubstring(s, words))cout << word << " ";cout << endl; Solution sol2;s = "wordgoodgoodgoodbestword";words = {"word","good","best","word"};for (auto word:sol2.findSubstring(s, words))cout << word << " ";return 0;
} 

输出:

0 9
  //空


相关内容

热门资讯

中考事后记(最新5篇) 中考事后记 篇一中考是每个初中生都要经历的一场重大考试,对于我来说也不例外。回顾这次中考,我有许多感...
优秀中考作文开头(优质3篇) 优秀中考作文开头 篇一我的梦想之旅人生的旅程,仿佛是一场精心设计的旅行,每个人都有自己的目的地和梦想...
中考满分作文:心旷神怡【精简... 中考满分作文:心旷神怡 篇一心旷神怡——探索自然的乐趣自然是一座无垠的宝库,它的美丽和奥妙无法用言语...
历年中考满分作文【优秀6篇】 历年中考满分作文 篇一标题:互联网对青少年的影响互联网已经成为现代社会中不可或缺的一部分,给我们的生...
中考加油作文(实用6篇) 中考加油作文 篇一中考加油作文近日,我即将迎来人生中的重要一刻——中考。在这漫长的三年中,我付出了大...
就这样,埋下一颗种子中考作文... 就这样,埋下一颗种子中考作文篇一随着时间的推移,中考的脚步越来越近,我感受到了胸口的紧迫感。这次中考...
青春与爱同行中考范文(精选6... 青春与爱同行中考范文 篇一初中生活即将结束,我对这段时光充满了感慨和思考。回想起这三年来的点点滴滴,...
太阳作文(精选3篇) 太阳作文 篇一太阳,这是我们熟悉的天体之一。它是地球的中心,为我们提供了光和热,使我们能够生存。太阳...
中考大山(通用3篇) 中考大山 篇一大山,是我心中最美的地方。每当我想起中考时的那个夏天,总会想起我和同学们一起攀登大山的...
中考文言文必考篇目重点翻译句... 篇一:中考文言文必考篇目重点翻译句子文言文作为中考必考的一项内容,对学生的翻译能力要求较高。下面是几...
中考语文考试重点分析范文【精... 中考语文考试重点分析范文 篇一中考语文考试重点分析范文语文考试一直是中考中最重要的科目之一,它不仅考...
中考英语词语辨析:alive... 中考英语词语辨析:alive/ living/ the living/ 篇一标题:The Diffe...
中考热点作文【经典6篇】 中考热点作文 篇一题目:网络游戏对青少年的影响随着互联网的普及和技术的进步,网络游戏已经成为了许多青...
中考满分作文范文欣赏(精彩6... 中考满分作文范文欣赏 篇一梦想的力量人生如同一场马拉松,我们需要不断努力奔跑,才能到达胜利的终点。而...
中考作文写事满分范文(实用6... 中考作文写事满分范文 篇一我与“长者的故事”近日,我有幸参加了一次与老人们交流的活动,这让我对长者们...
你是我的太阳中考优秀作文【精... 你是我的太阳中考优秀作文 篇一太阳是地球上最重要的存在,它给予了我们光明与温暖。然而,在我心中,你是...
中考优秀作文满分范文大全【最... 中考优秀作文满分范文大全 篇一题目: 足球与我足球是一项广受欢迎的体育运动,也是我生活中不可或缺的一...
山西中考语文作文模板范文(推... 山西中考语文作文模板范文 篇一标题:传统与现代的碰撞随着社会的发展,传统文化与现代社会产生了许多碰撞...
“大爱”中考满分作文点评(精... “大爱”中考满分作文点评 篇一第一篇内容:探讨大爱的意义和体现方式在我们的日常生活中,大爱无处不在。...
中考辅导:语文知识复习(精彩... 中考辅导:语文知识复习 篇一语文知识复习对于中考来说是至关重要的。通过对重点知识的复习和巩固,可以提...