首页 > 编程语言 >每日OJ题_牛客_NC101压缩字符串(一)_模拟_C++_Java

每日OJ题_牛客_NC101压缩字符串(一)_模拟_C++_Java

时间:2024-10-13 13:22:47浏览次数:3  
标签:cnt right Java OJ param ret C++ string left

目录

牛客_NC101压缩字符串(一)_模拟

题目解析

C++代码

Java代码


牛客_NC101压缩字符串(一)_模拟

压缩字符串(一)_牛客题霸_牛客网 (nowcoder.com)

描述:

        利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2bc5a3。

  1. 如果只有一个字符,1不用写
  2. 字符串中只包含大小写英文字母(a至z)。

数据范围:

0<=字符串长度<=50000

要求:

时间复杂度O(N)


题目解析

        利用双指针模拟即可,只需用一个cnt记录上一个字符出现的次数即可,如果cnt=1则直接向结果追加字母,不加数字,如果cnt>1才追加出现的次数。注意9以上的数字不能直接+'0'转成字符,要to_string。

C++代码

#include <string>
class Solution {
public:
	/**
	* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
	*
	*
	* @param param string字符串
	* @return string字符串
	*/
	string compressString(string param) {
		int left = 0, right = 1, sz = param.size();
		string ret;
		while (right < sz)
		{
			int cnt = 1;
			while (param[left] == param[right])
			{
				++cnt;
				++right;
			}
			ret += param[left];
			if (cnt != 1)
				ret += to_string(cnt);
				// ret += cnt + '0'; // !!!!!!!!!!!!
			left = right;
			++right;
		}
		if (left == sz - 1)
			ret += param[left];
		// cout << left << " " << right << " " << sz << endl;
		return ret;
	}
};

Java代码

import java.util.*;
public class Solution
{
    public String compressString (String param) 
    {
        StringBuffer ret = new StringBuffer();
        char[] s = param.toCharArray();
        int left = 0, right = 0, n = s.length;
        while(left < n)
        {
            while(right + 1 < n && s[right + 1] == s[right]) right++;
            int len = right - left + 1;
            ret.append(s[left]);
            if(len > 1)
            {
                ret.append(len);
            }
            left = right + 1;
            right = left;
        }
        return ret.toString();
    }
}

标签:cnt,right,Java,OJ,param,ret,C++,string,left
From: https://blog.csdn.net/GRrtx/article/details/142873047

相关文章

  • java计算机毕业设计在线订餐平台系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和人们生活节奏的加快,在线订餐已成为现代都市生活不可或缺的一部分。传统的餐饮消费模式正逐渐被线上化、便捷化的订餐方式......
  • 慧通教育C++测试题 103662--103666(5题)
    103662.数据交换难度:1登录//103662.数据交换难度:1#include<bits/stdc++.h>usingnamespacestd;intm,n,a[105][105],x,y;intmain(){ cin>>m>>n; for(inti=1;i<=m;i++){ for(intj=1;j<=n;j++){ cin>>a[i][j]; } } cin>>x>......
  • 在wsl上配置vscode和c++环境
    在wsl中配置Ubuntu在powershell中输出指令,更新并检查版本wsl--updatewsl--version输出:WSL版本:2.3.24.0内核版本:5.15.153.1-2WSLg版本:1.0.65MSRDC版本:1.2.5620Direct3D版本:1.611.1-81528511DXCore版本:10.0.26100.1-240331-1435.ge-releaseWindows版本......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript游戏网站(英雄联盟)
    HTML+CSS+JS【游戏网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 基于Java+Jsp+Html+MySQL实现的企业仓储管理系统设计与实现(源码+文档+部署视频)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • Java反射专题
    目录一.反射机制1.JavaReflection2.反射相关的主要类3.反射的优缺点4.反射调用优化—关闭访问检查二.Class类1.基本介绍2.常用方法3.获取Class对象的方式4.那些类型有Class对象三.类加载1.介绍2.类加载时机3.类加载各阶段四.获取类结构的信息1.java.lang.Cl......
  • JavaScript中的DOM和Timer(简单易用的基本操作)
    JavaScript中的DOM和Timer基本操作DOM操作传统的选择器选择器idvarelements=document.getElementById(id的名称);例如:varelements=document.getElementById("test");选择id为test的标签选择器classvarelements=document.getElementsByClassName(class的名称);......
  • 基于Java的ATM机模拟程序设计与实现
    一、引言随着金融行业的发展,ATM机已经成为人们日常生活中不可或缺的一部分。为了更好地理解ATM机的工作原理,本文设计并实现了一个基于Java的ATM机模拟程序。该程序通过模拟ATM机的操作流程,使用户能够体验到ATM机的基本功能。二、系统设计与实现1.用户登录模块用户登录模块......
  • 实验1 现代C++编程初体验
    实验任务1:代码:1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;7template<typenameT>8voidoutput(constT&c);9voidtest1();10voidtest2();11vo......
  • 基于Java+SSM的二手车交易网站
    项目说明网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此二手车交易信息的管理计算机化,系统化是必要的。设计开......