字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
"aabcccccaaa"
"a2b1c5a3"
"abbccd"
"abbccd"
"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return string字符串 */ public String compressString (String str) { // write code here StringBuffer sb = new StringBuffer (); int len = str.length(); int count = 0; char ch = str.charAt(0); for (int i = 0;i < len; i ++) { if (ch == str.charAt(i)) { count ++; }else { sb.append(ch); sb.append(count); ch = str.charAt(i); count = 1; } } sb.append(ch); sb.append(count); return len > sb.toString().length() ? sb.toString(): str; } }leetcode上原题
public String compressString (String str) { if (str.length() < 2) { return str; } char[] arr = str.toCharArray(); StringBuilder sb = new StringBuilder(); int count = 1; for (int i = 0; i < arr.length - 1; i++) { if (arr[i] == arr[i + 1]) { count++; } else { sb.append(arr[i]).append(count); count = 1; } if ((i + 1) == arr.length - 1) { sb.append(arr[i]).append(count); } } return sb.length() < str.length() ? sb.toString() : str; }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return string字符串 */ public String compressString (String str) { // write code here StringBuilder strBuilder=new StringBuilder(); char ch=str.charAt(0);//慢指针 int sum=1; for(int i=1;i<str.length();i++){ char ch2=str.charAt(i);//快指针 if(ch==ch2){//匹配成功后sum++,然后用continue跳出去,继续执行下面,这样ch就不变,ch2往后加一位,就是个快指针 sum++; continue; } strBuilder.append(ch).append(sum); ch=ch2; sum=1; } strBuilder.append(ch).append(sum);//执行完循环后会剩最后一个字符拼不进去,所有要再手动加一次 if(strBuilder.length()>=str.length()){//判断长度 return str; }else{ return strBuilder.toString(); } } }我对算法的名称可能不是很了解,我的想法是先做出一个strbuilder构造器,然后做出两个指针,一个慢指针一个快指针,然后看看框了多少个字符,统计下来后拼接到strbuilder里。最后比较的时候看看字符串长短