输入一行字符串,代表str。
输出一行字符串,代表统计字符串。
offerofferzainaliiiiii
o_1_f_2_e_1_r_1_o_1_f_2_e_1_r_1_z_1_a_1_i_1_n_1_a_1_l_1_i_6
hhhaaa
h_3_a_3
时间复杂度,空间复杂度。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static String getCountString(String str) { if (str == null || str.equals("")) { return null; } // 初始时字符串res只包含str的第0个字符,同时num = 1 StringBuilder res = new StringBuilder(); res.append(str.charAt(0)); int num = 1; for (int i = 1; i < str.length(); i++) { // 当前重复的字符已经结束 if (str.charAt(i) != str.charAt(i - 1)) { res.append('_').append(num).append('_').append(str.charAt(i)); num = 1; } else { num++; } } // 当遍历结束时,最后一种字符的次数还没有放入res,需要加上, return res.append('_').append(num).toString(); } // private static String concat(String s1, String s2, String s3) { // // res(s1) + "_num(s2)" + "动态判断是否需要_的s3(下一个字符)" // return s1 + "_" + s2 + (s3.equals("") ? s3 : "_" + s3); // } public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String line= null; while ((line = bf.readLine())!=null){ System.out.println(getCountString(line)); } } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] str = br.readLine().trim().toCharArray(); StringBuilder sb = new StringBuilder(); char target = str[0]; int count = 1; for(int i = 1; i < str.length; i++){ if(str[i] == target) count ++; // 和前面的字符相同,计数+1 else{ // 字符出现变化,更新目标字符和计数 sb.append(target).append('_').append(count).append('_'); target = str[i]; count = 1; } } sb.append(target).append('_').append(count); System.out.println(sb); } }
#include <bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; char c = s[0]; int cnt = 1; bool first = true; for(int i=1;i<s.length();i++){ if(s[i]==c) cnt++; else{ if(first){ printf("%c_%d", c, cnt); first = false; }else printf("_%c_%d", c, cnt); c = s[i]; cnt = 1; } } if(first) printf("%c_%d", c, cnt); else printf("_%c_%d\n", c, cnt); return 0; }
import java.util.Scanner; public class Main { /** * 字符串的统计字符串 * @param args args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.next(); StringBuilder sb = new StringBuilder(); while (!"".equals(line)) { char[] arr = line.toCharArray(); char temp = 0; int count = 1; int index = 0; for (int i = 0; i <arr.length; i++) { if (i == 0) { temp = arr[0]; } else { if (temp == arr[i]) { count ++; } else { index = i; sb.append(temp).append("_").append(count).append("_"); break; } } if (i == arr.length - 1) { index = i + 1; sb.append(temp).append("_").append(count).append("_"); break; } } line = line.substring(index); if ("".equals(line)) { break; } } String str = sb.toString(); if (str.endsWith("_")) { str = str.substring(0, str.length() - 1); } System.out.println(str); } }
#读入字符串 input_s=input() #结果字符串 ans='' #当前所在的字符 now_index=input_s[0] #当前所在字符的数量 Count=1 #遍历字符串 for i in input_s[1:]: #如果字符相等 #数量+1 if i==now_index: Count+=1 #不相等的话 #输出 #统计下一个字符 else: ans+=now_index+'_'+str(Count)+'_' now_index=i Count=1 #最后一个字符的信息 ans+=now_index+'_'+str(Count) print(ans)
while True: try: strs= input() lis=[] coun=1 for i in range(len(strs)-1): if strs[i]==strs[i+1]: coun+=1 else: lis.append(strs[i]+'_'+str(coun)) coun=1 lis.append(strs[-1]+'_'+str(coun)) #最后一位因为循环长度问题,最后添加 print('_'.join(lis)) except: break
#include<iostream> using namespace std; int main() { string s;cin>>s; int n = s.size(); int count = 1; for(int i=1;i<n;++i) { if(s[i] == s[i-1]) count++; else { cout << s[i-1] <<"_" << count<<'_'; count = 1; } } cout << s[n-1] <<"_" << count << endl; return 0; }
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; char pre=s[0]; int count=0; int flag=0; for(int i=0;i<s.size();i++){ char now=s[i]; if(now==pre){ count++; }else{ if(flag==0){ cout<<pre<<"_"<<count<<"_"; flag=1; }else{ cout<<pre<<"_"<<count<<"_"; } pre=now; count=1; } if(i==s.size()-1){ cout<<pre<<"_"<<count<<endl; } } }//幼儿园级别的代码水平
package character_string; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //字符串的统计字符串 public class statistics_string { public static String getCountString(String str) { // 判断字符串是否为空 if (str == null || str.equals("")) { return ""; } // 将字符串转换为数组 char[] c = str.toCharArray(); // 获取数组的第一个字符串 StringBuffer res = new StringBuffer(); res.append(c[0]); int num = 1; for (int i = 1; i < c.length; i++) { // 判断是否为连续的出现的字符 if (c[i] != c[i - 1]) { res = res.append("_" + num + "_" + String.valueOf(c[i])); num = 1; } else { num++; } } return res.append("_" + String.valueOf(num)).toString(); } public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String str = in.readLine(); System.out.println(getCountString(str)); } }