LeetCode String Compression

原题链接在这里:https://leetcode.com/problems/string-compression/description/

题目:

Given an array of characters, compress it in-place.

The length after compression must always be smaller than or equal to the original array.

Every element of the array should be a character (not int) of length 1.

After you are done modifying the input array in-place, return the new length of the array.

Follow up:
Could you solve it using only O(1) extra space?

Example 1:

Input:
["a","a","b","b","c","c","c"]Output:
Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"]Explanation:
"aa" is replaced by "a2". "bb" is replaced by "b2". "ccc" is replaced by "c3".

Example 2:

Input:
["a"]Output:
Return 1, and the first 1 characters of the input array should be: ["a"]Explanation:
Nothing is replaced.

Example 3:

Input:
["a","b","b","b","b","b","b","b","b","b","b","b","b"]Output:
Return 4, and the first 4 characters of the input array should be: ["a","b","1","2"].Explanation:
Since the character "a" does not repeat, it is not compressed. "bbbbbbbbbbbb" is replaced by "b12".
Notice each digit has it's own entry in the array.

题解:

计数连续相同char的个数加在后面.

Time Complexity: O(chars.length). Space: O(1).

AC Java:

 1 class Solution {
 2     public int compress(char[] chars) {
 3         if(chars == null || chars.length == 0){
 4             return 0;
 5         }
 6         
 7         int mark = 0;
 8         int write = 0;
 9         for(int i = 0; i<chars.length; i++){
10             if(i+1==chars.length || chars[i]!=chars[i+1]){
11                 chars[write++] = chars[mark];
12                 if(mark<i){
13                     for(char c : (""+(i-mark+1)).toCharArray()){
14                         chars[write++] = c;
15                     }
16                 }
17                 mark = i+1;
18             }
19         }
20         
21         return write;
22     }
23 }

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/8202915.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瀑布模型 原型模型 增量模型 螺旋模型的优缺点

瀑布模型的优点&#xff1a;有利于大型软件开发过程中人员的组织、管理&#xff0c;有利于软件开发方法和工具的研究&#xff0c;从而提高了大型软件项目开发的质量和效率。瀑布模型的缺点&#xff1a;&#xff08;1&#xff09;开发过程一般不能逆转&#xff0c;否则代价太大&…

二手手机交易平台使用MYSQL的方法_安卓Android校园淘(二手交易)APP设计与实现(MySQL)...

安卓Android校园淘(二手交易)APP设计与实现(MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文14000字,程序代码,MySQL数据库)本项目就是一个基于Android平台的校园淘APP设计&#xff0c;采用了Struts技术&#xff0c;JDBC技术和Android的基础技术完成开发。收录了…

频繁项集-------产生强关联规则的过程

频繁项集------->产生强关联规则的过程 1.由Apriori算法&#xff08;当然别的也可以&#xff09;产生频繁项集 2.根据选定的频繁项集&#xff0c;找到它所有的非空子集 3.强关联规则需要满足最小支持度和最小置性度 &#xff08;假设关联规则是&#xff1a;A>B &#…

ADSL之PPPOE

大家好&#xff01;我是书记&#xff0c;今天我来小谈一下网络中的PPPOE技术。 PPPOE&#xff08;Point to Point Protocol over Ethernet&#xff09;以太网点到点协议&#xff0c;简单的说&#xff0c;是以太网协议和PPP协议结合后所产生的协议&#xff0c;是在PPP协…

java标号

标号用于控制循环执行流程&#xff1a; public static void main(String[] args) {mark:for(int i 0; i < 3; i) {System.out.printf("i %d\n", i);for (int j 0; j < 3; j) {System.out.printf("j %d\n", j);if (i 1 && j 1) {//brea…

LAMP环境下ECShop系统部署

作业环境服务器端&#xff1a;RHEL6.0 IP&#xff1a;10.8.110.8 客户端&#xff1a;Windows 7 IP&#xff1a;10.8.110.28 一、ECShop简介 ECShop是上海商派网络科技有限公司&#xff08;ShopEx&#xff09;旗下——B2C独立网店系统&#xff0c;适合企业及个人快速构建个…

date js 半年_JavaScript Date对象

Date对象源码下载最初接触编程&#xff0c;没有接触过非常讲究时间控制的领域&#xff0c;往往对时间没有概念&#xff0c;单片机编程&#xff0c;嵌入式开发&#xff0c;操作系统&#xff0c;无人及姿态控制往往会关注毫秒ms、微秒us级的时间概念。什么是并行&#xff0c;什么…

SQL Server代理的阶梯 - 第2级:作业步骤和子系列

作者&#xff1a;Richard Waymire&#xff0c;2017/10/11&#xff08;第一版&#xff1a;2011/02/17&#xff09; 原文链接&#xff1a;http://www.sqlservercentral.com/articles/SQLAgent/JobStepsandSubsystems/72268/ 该系列 本文是“Stairway系列&#xff1a;SQL Server代…

java动画闪烁_优化Java动画编程中的显示效果

Java动画编程有多种实现方法&#xff0c;但它们实现的基本原理是一样的&#xff0c;即在屏幕上画出一系列的帧来造成运动的感觉。Java多线程技术是Java动画编程中普遍运用的技术&#xff0c;它在控制动画程序的流程和动画的显示效果方面起着重要的作用。Java动画编程中的动画闪…

Visual C++ 2011-5-20

一.LockFile和UnlockFile 锁定文件部分区域&#xff0c;防止其他程序进行该部分区域的读写 #include <windows.h> #include <stdio.h>void main() {HANDLE hFile;HANDLE hAppend;DWORD dwBytesRead, dwBytesWritten, dwPos;BYTE buff[4096];// Open the existin…

如何快速将文本中的tab更换成逗号(图文详解)

不多说&#xff0c;直接上干货&#xff01; 现有一份数据如下。 下载日志数据并分析 到搜狗实验室下载用户查询日志 1) 介绍 搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点击情况的网页查询日志数据集合。为进行中文搜索引擎用户行为…

java中矩阵怎么打印_在Java编程中打印二维数组或矩阵

在本文中&#xff0c;我们将尝试以与通常在纸上书写相同的方式在控制台上打印数字数组或数字矩阵。为此&#xff0c;逻辑是一个接一个地访问数组的每个元素&#xff0c;并使其以空格分隔打印&#xff0c;当行到达矩阵中的emd时&#xff0c;我们还将更改行示例public class Prin…

Commit Monitor–svn监控工具

SVN更改通知的工具&#xff0c;在这里分享给大家。 自己负责的模块代码有时被同事修改&#xff0c;但是没有知会&#xff0c;也不容易了解到具体的改动内容&#xff0c;可能造成各种各样的问题。这里推荐一个工具Commit Monitor&#xff0c;可以监控svn仓库的提交记录&#xff…

用python发送email

#coding:utf-8from email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrimport smtplibdef _format_addr(s): name, addr parseaddr(s) return formataddr((Header(name, utf-8).encode(), addr))#发件人地址…

java 获取mac地址 乱码_Java:开机获取Mac地址问题

server.jar设置为开机自启动&#xff0c;启动时会执行getLinuxMac()方法获取本机Mac地址&#xff1a;private static String getLinuxMac() {StringBuffer sb new StringBuffer();try {String str "ifconfig | grep ether | sed -n 1p | awk -F {print $2}";Strin…

WinCE6.0学习之EBoot源码分析----startup.s(三)

下面将详细叙述MMU的设置&#xff0c;也是本人花费时间最多的一部分内容&#xff0c;无论是2410、6410甚至是Cortex-A8核的ARM&#xff0c;MMU的设置基本都一样&#xff0c;所以移植时这部分可以直接搬过来&#xff0c;只需要更改全局内存映射表的映射关系即可。<?xml:name…

oracle 察看用户是否被锁,解锁以及改密码

以管理员身份登陆察看用户状态&#xff08;是否被锁&#xff09; select * from dba_users where usernameuser1 解锁 ALTER USER user1 ACCOUNT UNLOCK; 修改用户密码 alter user user1 identified by newpass;转载于:https://www.cnblogs.com/lcword/p/8232042.html

java json删除节点_指定json的某个节点进行增、删、改

有时候我们需要对json结构的数据进行更新&#xff0c;或增&#xff0c;或改&#xff0c;或删。当json层级比较复杂时操作起来是比较麻烦的&#xff0c;得一层层找下去找到要更新的节点才能操作它。我用python语言封装了一个类&#xff0c;提供三个函数分别用于增删改json的目标…

高级 Linux 命令精通指南(2)

xargs 大多数 Linux 命令都会产生输出&#xff1a;文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办&#xff1f;例如&#xff0c;file 命令显示文件类型&#xff08;可执行文件、ascii 文本等&#xff09;&#xff1b;您可以处理输出&a…

java如何实现Socket的长连接和短连接

讨论Socket必讨论长连接和短连接 一、长连接和短连接的概念 1、长连接与短连接的概念&#xff1a;前者是整个通讯过程&#xff0c;客户端和服务端只用一个Socket对象&#xff0c;长期保持Socket的连接&#xff1b;后者是每次请求&#xff0c;都新建一个Socket,处理完一个请求就…