持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
1447. 最简分数
题目
给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。
示例 1:
输入:n = 2 输出:["1/2"] 解释:"1/2" 是唯一一个分母小于等于 2 的最简分数。
示例 2:
输入:n = 3 输出:["1/2","1/3","2/3"]
示例 3:
输入:n = 4 输出:["1/2","1/3","1/4","2/3","3/4"] 解释:"2/4" 不是最简分数,因为它可以化简为 "1/2" 。
示例 4:
输入:n = 1 输出:[]
提示:
1 <= n <= 100
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/si…
分析
要求最简,说明分子和分母最大公约数为1。同时要注意数字和字符串的转换关系
代码
class Solution {
public:
int gcd(int a, int b){
if(a % b==0){
return b;
}
return gcd(b, a % b);
}
vector<string> simplifiedFractions(int n) {
vector<string> ans;
for(int i=2; i <= n; i++){
for(int j=1; j < i; j++){
if(gcd(i, j) > 1){
continue;
}
string ch1="", ch2 = "";
int n=j;
while(n){
char ch = n % 10 + '0';
n /= 10;
ch1 = ch + ch1;
}
n=i;
while(n){
char ch = n % 10 + '0';
n /= 10;
ch2 = ch + ch2;
}
string tmp = "";
tmp += ch1;
tmp += '/';
tmp += ch2;
ans.push_back(tmp);
}
}
return ans;
}
};
2000. 反转单词前缀
题目
给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。
例如,如果 word = "abcdefd" 且 ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 "dcbaefd" 。 返回 结果字符串 。
示例 1:
输入:word = "abcdefd", ch = "d" 输出:"dcbaefd" 解释:"d" 第一次出现在下标 3 。 反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "dcbaefd" 。
示例 2:
输入:word = "xyxzxe", ch = "z" 输出:"zxyxxe" 解释:"z" 第一次也是唯一一次出现是在下标 3 。 反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "zxyxxe" 。
示例 3:
输入:word = "abcd", ch = "z" 输出:"abcd" 解释:"z" 不存在于 word 中。 无需执行反转操作,结果字符串是 "abcd" 。
提示:
1 <= word.length <= 250 word 由小写英文字母组成 ch 是一个小写英文字母
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/re…
代码
查找并反转即可
class Solution {
public:
string reversePrefix(string word, char ch) {
string ans="";
for(int i=0; i < word.size(); i++){
ans = word[i] + ans;
if(ch == word[i]){
return ans + word.substr(i+1, word.size()-i-1);
}
}
return word;
}
};
2047. 句子中的有效单词数
题目
句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。
如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:
仅由小写字母、连字符和/或标点(不含数字)。 至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab" 和 "ab-" 不是有效单词)。 至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾 。 这里给出几个有效单词的例子:"a-b."、"afad"、"ba-c"、"a!" 和 "!" 。
给你一个字符串 sentence ,请你找出并返回 sentence 中 有效单词的数目 。
示例 1:
输入:sentence = "cat and dog"
输出:3
解释:句子中的有效单词是 "cat"、"and" 和 "dog"
示例 2:
输入:sentence = "!this 1-s b8d!"
输出:0
解释:句子中没有有效单词
"!this" 不是有效单词,因为它以一个标点开头
"1-s" 和 "b8d" 也不是有效单词,因为它们都包含数字
示例 3:
输入:sentence = "alice and bob are playing stone-game10"
输出:5
解释:句子中的有效单词是 "alice"、"and"、"bob"、"are" 和 "playing"
"stone-game10" 不是有效单词,因为它含有数字
示例 4:
输入:sentence = "he bought 2 pencils, 3 erasers, and 1 pencil-sharpener."
输出:6
解释:句子中的有效单词是 "he"、"bought"、"pencils,"、"erasers,"、"and" 和 "pencil-sharpener."
提示:
1 <= sentence.length <= 1000
sentence 由小写英文字母、数字(0-9)、以及字符(' '、'-'、'!'、'.' 和 ',')组成
句子中至少有 1 个 token
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/nu…
代码
class Solution {
public:
bool isValid(const string_view &word) {
int n = word.length();
bool has_hyphens = false;
for (int i = 0; i < n; i++) {
if (word[i] >= '0' && word[i] <= '9') {
return false;
} else if (word[i] == '-') {
if (has_hyphens == true || i == 0 || i == n - 1 || !islower(word[i - 1]) || !islower(word[i + 1])) {
return false;
}
has_hyphens = true;
} else if (word[i] == '!' || word[i] == '.' || word[i] == ',') {
if (i != n - 1) {
return false;
}
}
}
return true;
}
int countValidWords(string sentence) {
stringstream ss(sentence);
string s;
int cnt=0;
while(ss>>s){
if(isValid(s)){
cnt++;
}
}
return cnt;
}
};