辣条走起,每月的leetcode刷题99元奖励就靠大家啦~
前言
2018.11.29号打卡
昨天的题解
题目
每天一道leetcode443-压缩字符串
题目详述
给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: "the sky is blue",
无空格字符构成一个单词。
题目详解
思路
代码(安卓机代码可以移动,苹果机不行,最近我在寻找一个新的代码排版,PC端打开没有问题)
先放个图片,代码排版有问题的看图片
class Solution {
public int compress(char[] chars) {
int count = 1;
int index = 0;
for (int i = 0; i < chars.length; i++) {
if (i + 1 == chars.length || chars[i] != chars[i+1]) {
chars[index++] = chars[i];
if (count > 1) {
String temp = String.valueOf(count);
for(int k=0;k<temp.length();k++)
chars[index++] = temp.charAt(k);
}
count = 1;
}
else {
count++;//统计重复字符的个数
}
}
return index;
}
}
代码讲解
6行就是如果一个字符和它的下一个字符不相等了,首先是chars[index] = chars[i] 这行就是把比如a,a,b,b,b就是把数组i的位置指向第一个b,好重新开始新的一轮的计算重复字符的个数;
8-12行就是如果字符的个数是大于1的那么就需要统计这个数字,然后10-11行就是把这个数字的变成字符串,取每一个字符赋值到字符数组中
13行 重新把count置位1因为一个字符至少出现一次
15-17行就是如果不相等,统计字符出现的次数
结束语
2018.11.29号打卡
作者乔戈里亲历2019秋招,哈工大计算机本硕,百度java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。