提取年份。给你一个字符串,按照出现顺序输出字符串中所有可能的年份,且年份要满足[1000,3999]。
我先是循环截取字符串,转为数字后判断,符合条件的加入集合中去重,但是只过了9%。后来想想如果一串连续的数字长度大于4,那么它肯定不是年份,所以要舍弃,所以对于连续的4个数字,应当判断它的后一位是不是非数字(或结尾),满足才能进一步判断。然后我改了之后还是只过了18%。不懂。。最后看别人的题解试了半天才搞定,也不懂是哪的问题(
let ans = [];
let set = new Set();
for (let i = 0; i < str.length - 3; i++) {
const substr = str.substring(i, i + 4);
if (1000 <= parseInt(substr) && parseInt(substr) <= 3999) {
// console.log(Number.isNaN(parseInt(str[i - 1])));
if (
Number.isInteger(parseInt(str[i - 1])) ||
Number.isInteger(parseInt(str[i + 4])) ||
set.has(substr)
) {
continue;
} else {
ans.push(substr);
set.add(substr);
}
}
}
for (let i = 0; i < ans.length; i++) {
if (i != ans.length - 1) console.log(ans[i] + " ");
else console.log(ans[i]);
}
console.log(ans);
let str=gets(2022);
let ans = [];
let set = new Set();
let cnt = 0;
for (let i = 0; i < str.length; i++) {
if (str[i] >= "0" && str[i] <= "9") {
if (cnt == 0 && str[i] == "0") continue;
else cnt++;
} else {
if (cnt == 4) set.add(parseInt(str.substring(i - cnt, i)));
cnt = 0;
}
}
if (cnt == 4) set.add(parseInt(str.substring(str.length - cnt, str.length)));
let isFirst = true;
set.forEach((item) => {
if (item <= 3999 && item >= 1000) {
if (isFirst) {
console.log(item);
isFirst = false;
} else console.log(" " + item);
}
});
给一个由大写和小写字母组成的字符串,已知默认输入为小写,输入时可以按住shift切换大小写(每输入一个字母按住shift算一次额外操作)或者按Caps切换大小写锁定,要求输出输入这串字符串所需的最小操作数。
很明显,当遇到需要切换大小写的情况时,如果需要切换为小写(或大写)且接下来有2个及以上的小写(或大写)字母,那么明显使用Caps(额外操作1次)会比使用shift(每多一个字母额外操作1次)操作数更少。所以只需要标记当前的大小写锁定情况,在遇到需要切换大小写时操作数额外+1,且当其后一个字母仍为切换后的大小写时保留大小写锁定(使用Caps)最终输出操作数即可。但是这个JS代码依然过不了。。。完全不理解有什么问题,用完全一模一样的逻辑用C++写了一个,直接一遍过。。。太迷惑了。。。
let ans = 0;
let upper = false;
for (let i = 0; i < str.length; i++) {
ans++;
if (upper === false) {
if ("A" <= str[i] && str[i] <= "Z") {
ans++;
if (i < n - 1 && "A" <= str[i + 1] && str[i + 1] <= "Z") upper = true;
}
}
if (upper === true) {
if ("a" <= str[i] && str[i] <= "z") {
ans++;
if (i < n && "a" <= str[i + 1] && str[i + 1] <= "z") upper = false;
}
}
}
console.log(ans);
int main()
{
int n;
string s;
cin >> n >> s;
int ans = 0;
bool upper = false;
for (int i = 0; i < s.length(); i++)
{
ans++;
if (!upper)
{
if ('A' <= s[i] && s[i] <= 'Z')
{
ans++;
if ('A' <= s[i + 1] && s[i + 1] <= 'Z')
upper = true;
}
}
if (upper)
{
if ('a' <= s[i] && s[i] <= 'z')
{
ans++;
if ('a' <= s[i + 1] && s[i + 1] <= 'z')
upper = false;
}
}
}
cout << ans;
}
本文作者:TTQ
本文链接:https://blog.ponder.fun/archives/156.html
最后修改时间:2022-04-27 21:24:15
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!