使用java语言,将字符串中连续重复出现的字母变成“出现次数“+字母的格式
今天在简书上看到这样一道有趣的算法题:

解题思路
首先定义一个变量
element,默认是字符串的第一个字符。以element为基准元素,去判断某个字符是否重复。然后再去定义一个变量count去记录重复的次数,初始值应该为1。然后我们去遍历整个字符串,应该从第
1号位置的字符开始遍历。如果当前字符等于element,就说明该字符在当前字符串中出现过,已经重复了。那么count就应该自增。如果当前字符不等于
element,就说明上一个字符连续的重复次数已经计算完毕,可以进行拼接操作。接下来我们就可以操作当前字符了,count还原到初始值1。遍历结束时,进行拼接操作。为什么不在第二步进行拼接操作? 因为当前字符在整个字符串中重复的次数还没有统计完,如果记录一次重复的次数,就进行拼接的操作的话,肯定不能达到预期效果。假如字符串是
“ppppp”,如果这样做了,输出结果会是"p2p3p4p5"。所以必须要统计完某一个字符的重复次数,才能进行拼接操作。我们只需要计算一个字符连续的重复次数。当我们遍历某一个字符时,发现它不等于element,就说明它上一个字符重复次数已经统计好,这时候我们才可以进行拼接字符串操作。
应该注意的问题
先一般,后特殊。进行边界控制,我们要去判断字符串是否为
null或者“”,然后去做相应的判断。每次必须在前推进循环不变式中涉及到的变量值。
比如一个字符
a在该字符串中出现过1次,那么应该输出a,而不是a1。不要使用字符串拼接的形式拼接数据,
String是不可变对象,每次拼接会生成新的String对象。使用StringBuffer是线程安全的,还是可变对象。每次调用append()并不会生成一个新的字符串。
代码实现:
public class Demo {
public static void main(String[] args) {
encode("wwwbbawabbb");
encode("a");
encode("abcabcccc");
encode("ppppprrrrppp");
encode("");
encode(null);
}
public static void encode(String str) {
if (str == null || str.equals("")) {
System.out.println("");
return;
}
// 利用StringBuffer变量字符串接受结果
StringBuffer sb = new StringBuffer();
char element = str.charAt(0);
int count=1;
for(int i=1;i<str.length();i++) {
if(element==str.charAt(i)) {
count++;
}else {
//当读到另一个不一样的字符的时候,再拼接之前统计的字符
sb.append(element);
//如果统计数量为1的时候不输出统计数量
sb.append(count==1 ? "" :count);
element = str.charAt(i);
count=1;
}
}
// 保证当最后一个字符和统计的数量都拼接上
sb.append(element);
sb.append(count==1 ? "" :count);
// 输出整个结果
System.out.println(sb.toString());
}
}
原文地址:https://www.jianshu.com/p/32756f1ea4e7
使用java语言,将字符串中连续重复出现的字母变成“出现次数“+字母的格式的更多相关文章
- java 统计字符串中连续重复的字符,并得出新字符串
题目: 比如输入为aaabbc,输出a3b2c1 完整解答: public class Other { static String func(String str) { StringBuffer re ...
- [java] 找出字符串中出现最多的字符和出现的次数
逛园子看到一童鞋做的华为上机题目,写来好长的代码,懒得看,感觉不可能这么难,于是动手敲了下. import java.util.Scanner; public class StringTest { / ...
- 三种java 去掉字符串中的重复字符函数
三种java 去掉字符串中的重复字符函数 public static void main(string[] args) { system.out.println(removerepeatedchar( ...
- java 获得字符串中最大重复子串长度
参考:http://blog.csdn.net/csdn_yaobo/article/details/50338025 要找一串字符串中,重复的字串长度,.例如ABCX1&ABC,中ABC重复 ...
- JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
package com.pb.demo.packclass.demo1; import java.util.HashSet; /** * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符 ...
- 《程序员代码面试指南》第五章 字符串问题 去掉字符串中连续出现k 个0 的子串
题目 去掉字符串中连续出现k 个0 的子串 java代码 package com.lizhouwei.chapter5; /** * @Description: 去掉字符串中连续出现k 个0 的子串 ...
- c# 过滤字符串中的重复字符
有字符串"a,s,d,v,a,v",如果想去除其中重复的字符,怎么做? 下面是一个方法,用Hashtable来记录唯一字符,排除重复字符,仅供参考. 1.过滤方法: public ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- Java 获取一个字符串中,另一个字符串出现的次数
Java 获取一个字符串中,另一个字符串出现的次数 思想: 1. indexOf到字符串中到第一次出现的索引2. 找到的索引+被找字符串长度,截取字符串3. 计数器++ 代码实现: public cl ...
随机推荐
- nginx + tomcat 反向代理
简单的配置:# my test java+nginx project server { listen ; server_name localhost; root /home/user/Desktop/ ...
- 再谈async与await
回顾C#5.0是如何进行异步编程的 static void Main(string[] args) { string url = "https://docs.microsoft.com/zh ...
- CMake入门实战
本文用来记录基本的Cmake用法,以一个实例,讲解如何通过cmake构建一个一个基本的工程,文件的目录如下: 说明: bin文件夹下的debug和release分别存放编译输出的文件和相关依赖的动态库 ...
- 事务处理中如何获取同一个connection 对象
运用线程内部的map属性,将对象绑定到ThreadLocal中: 具体实现: 1.新建一个绑定Connection对象的单例类 public class ConnectionBind { privat ...
- HTTP协议中GET和POST区别
GET一般用于获取和查询资源信息:POST一般用于更新信息,表示可能修改服务器上资源的请求 GET请求一般是幂等的 GET请求数据会附加在url之后,POST请求数据放到request-body中 G ...
- Mark一下~
今天在cnblogs开通了博客,mark一下~ 上半年的Rebase阶段已经完成,希望下半年的Promotion阶段能收获满满,也希望自己能写出高质量的博客.
- samba 基本配置及自定义控制
Samba简介: Samba实现的是Linux和Windows之间的一种共享,为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,共享文件系统.打印机及其他资 ...
- jdk源码阅读笔记-String
本人自学java两年,有幸初入这个行业,所以功力尚浅,本着学习与交流的态度写一些学习随笔,什么错误的地方,热烈地希望园友们提出来,我们共同进步!这是我入园写的第一篇文章,写得可能会很乱. 一.什么是S ...
- 【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在Android开发过程,经常需要用到第三方库以及jar.so.arr文件,那么如何引用到项目中呢?下面简单介绍下. 引用第三方库 ...
- Python:游戏:300行代码实现俄罗斯方块
本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很难啊, ...