当前位置: 首页 > news >正文

每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java

目录

牛客_OR59字符串中找出连续最长的数字串

题目解析

C++代码1

C++代码2

C++代码3

Java代码


牛客_OR59字符串中找出连续最长的数字串

字符串中找出连续最长的数字串_牛客题霸_牛客网


题目解析

        双指针: 遍历整个字符串,遇到数字的时候,用双指针找出这段连续的数字子串,根据此时的长度更新起始位置和长度。

C++代码1

#include <iostream>
#include <string>
using namespace std;int main()
{string s;cin >> s;int begin = -1, len = 0;for(int i = 0; i < s.size(); i++){if(s[i] >= '0' && s[i] <= '9'){int j = i;while(j < s.size() && s[j] >= '0' && s[j] <= '9'){j++;}if(j - i > len){begin = i;len = j - i;}i = j;}}if(begin == -1){cout << "" << endl;}else{cout << s.substr(begin, len) << endl;}return 0;
}

C++代码2

#include <climits>
#include <iostream>
#include <string>
using namespace std;int main()
{string str;cin >> str;int sz = str.size();int maxLen = 0;int begin = 0, end = 0;for(int left = 0, right = 0; left < sz && right < sz;){while(left < sz && (str[left] > '9' || str[left] < '0')) // 是字母就循环{	// 或的两个没加括号直接数组越界。。。。++left; // 找数字区间的左边}right = left;while(right < sz && str[right] >= '0' && str[right] <= '9') // 是数字就循环{++right; // 找数字区间的右边}int len = right - left;// cout << "len : " << len << " " << left << " " << right << " sz " << sz << endl;if(len > maxLen && left < sz && right <= sz){// string tmp(str.begin() + left, str.begin() + right);// cout << tmp << endl;// cout << left << " " << right << " sz " << sz << endl;end = right;begin = left;maxLen = len;}left = right;}string ret(str.begin() + begin, str.begin() + end);cout << ret << endl;return 0;
}

C++代码3

#include <iostream>
#include <cctype>
using namespace std;int main() 
{string str, ret = "", tmp = "";cin >> str;int n = str.size();for(int i = 0; i <= n; i++){if(isdigit(str[i])){tmp += str[i]; // 进窗口}else{if(tmp.size() > ret.size()){ret = tmp;}else {tmp = "";}}}cout << ret;return 0;
}

Java代码

import java.util.Scanner;
import java.io.*;
public class Main
{public static void main(String[] args) throws Exception{BufferedReader br = new BufferedReader(new InputStreamReader(System.in));char[] s = br.readLine().toCharArray();int begin = 0, len = 0;for(int i = 0; i < s.length; i++){if(s[i] >= '0' && s[i] <= '9'){int j = i;while(j < s.length && s[j] >= '0' && s[j] <= '9'){j++;}if(j - i > len){begin = i;len = j - i;}i = j;}}for(int i = begin; i < begin + len; i++){System.out.print(s[i]);}}
}

http://www.mrgr.cn/news/37837.html

相关文章:

  • 【RabbitMQ】面试题
  • 这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了
  • 在AI时代,程序员如何保持核心竞争力
  • Markdown语法总结
  • JAVA连接HDFS使用案例
  • OJ在线评测系统 将代码沙箱开放为API 跑通前端后端整个项目 请求对接口
  • 通义千问:让我的编程工作效率翻倍的秘密武器
  • H.264编码介绍
  • 【漏洞复现】公交IC卡收单管理系统 SQL注入致RCE漏洞复现
  • 洛谷 AT_abc275_c [ABC275C] Counting Squares 题解
  • Matlab 软件入门
  • Diameter协议
  • 深入探索 PyTorch 在机器学习中的应用
  • 2024 CSP 游记
  • C++入门day5-面向对象编程(终)
  • 降AI率不再难:芝士AI去痕工具,让论文原创性飙升~~~
  • 组播基础-2-IGMP协议
  • 个人网站介绍和部署(开源)
  • 智能编辑器、版本控制与自动化脚本
  • Vert.x,Databases