粗略给一个小写字母的算法。 int counter[] = new int[26]; String buffer = "aaabbdcfeeswdfttrrccaa"; for (int i = 0; i < buffer.length(); i++) { char c = buffer.charAt(i); counter[c - 'a']++; } int max = 0; for (int i = 0; i < counter.length; i++) { if (counter[i] > max) max = counter[i]; } System.out.println("重复次数 "+max); for (int i = 0; i < counter.length; i++) { if(counter[i]==max) System.out.print((char)('a'+i)); }
import java.util.regex.*; public class Count {
public static void main(String[] args) { test("AAAAAAAAAAbcccccccBBBBBBBBBB"); } public static void test(String str) { int[] num = new int[str.length()]; char[] value = new char[str.length()]; int size = 0; while(str.length()>0){ char c = str.charAt(0); int count = 0; int index = str.indexOf(c); while(index!=-1) { count++; index = str.indexOf(c,index+1); } System.out.println(c+" : "+count) ;
补句 如果int counter[] = new int[26];改为int counter[] = new int[256]; for (int i = 0; i < buffer.length(); i++) { char c = buffer.charAt(i); counter[c - 'a']++; } 中的counter[c - 'a']++;可以改为 counter[c]++;
刚好有点空,帮楼主写一下,思维比较简单,虽然不是效率最优,但可读性较好,运行通过(楼上几位都没有写完整,楼主是估计是偷懒型的,我就舍身助人了)。虽然简单,但循环还真不少: import java.util.*; public class Test {
//找出重复次数最多的字符,并打印出数量和字符 public static void main(String[] args) { String a = "aaabbdcfeeswdfttrrccaa"; List ls = new LinkedList(); Test test = new Test(); for(int i=0; i<a.length(); i++){ if(!test.isHave(ls,(a.charAt(i)+""))){ ls.add(a.charAt(i)+""); } } //保存相应的位置的字母的个数 int[] ret = new int[ls.size()]; int max =0; //最大数 for(int i=0; i<ls.size(); i++){ ret[i] = test.getNum(ls.get(i).toString(),a); if(ret[i]>max){ max = ret[i]; } } //检查个数最大的,返回位置列表 List ls2 = new LinkedList(); for(int i=0; i<ret.length;i++){ if(ret[i]==max){ ls2.add(i+""); } }
//遍历ls2,打印出相应字母和个数 System.out.println("\n打印出个数最多的字母及个数:"); for(int i=0; i<ls2.size(); i++){ int m = Integer.parseInt(ls2.get(i).toString()); System.out.println("字母:"+ls.get(i).toString()+" 个数:"+ret[m]); }
int cnt = sizeof(number)/sizeof(int); for (int i=0;i<cnt;i++) { s.insert(number[i]); } int max = 0; int id = 0; for(int i=0;i<cnt;i++) { int tmp; tmp = s.count(number[i]); if (max < tmp) { max = tmp; id = i; } } return id; }void main() { int pre = timeGetTime(); int result = maxInt(); int delta = timeGetTime() - pre; std::cout<<result<<'\n' <<"time: "<<delta<<'\n';}我的方法 时间111毫秒
用比较笨的方法来做abc ="AlkjA;lkjlkjAlkAkjAlkjAAAA" if instr(abc,"A")>0 then abctext=split(abc,"A") for j=0 to ubound(abctext) next end if response.write j-1 j-1就是里面存在A的数量值了
int counter[] = new int[26];
String buffer = "aaabbdcfeeswdfttrrccaa";
for (int i = 0; i < buffer.length(); i++) {
char c = buffer.charAt(i);
counter[c - 'a']++;
}
int max = 0;
for (int i = 0; i < counter.length; i++) {
if (counter[i] > max)
max = counter[i];
}
System.out.println("重复次数 "+max);
for (int i = 0; i < counter.length; i++) {
if(counter[i]==max)
System.out.print((char)('a'+i));
}
public class Count {
public static void main(String[] args) {
test("AAAAAAAAAAbcccccccBBBBBBBBBB");
}
public static void test(String str) {
int[] num = new int[str.length()];
char[] value = new char[str.length()];
int size = 0;
while(str.length()>0){
char c = str.charAt(0);
int count = 0;
int index = str.indexOf(c);
while(index!=-1) {
count++;
index = str.indexOf(c,index+1);
}
System.out.println(c+" : "+count) ;
str = str.replaceAll(""+c,new String("")).trim();
}
}}一个程序,打印出每个字符个数
楼主自己修改一下就可以了
如果int counter[] = new int[26];改为int counter[] = new int[256];
for (int i = 0; i < buffer.length(); i++) {
char c = buffer.charAt(i);
counter[c - 'a']++;
}
中的counter[c - 'a']++;可以改为
counter[c]++;
import java.util.*;
public class Test {
//找出重复次数最多的字符,并打印出数量和字符
public static void main(String[] args) {
String a = "aaabbdcfeeswdfttrrccaa";
List ls = new LinkedList();
Test test = new Test();
for(int i=0; i<a.length(); i++){
if(!test.isHave(ls,(a.charAt(i)+""))){
ls.add(a.charAt(i)+"");
}
}
//保存相应的位置的字母的个数
int[] ret = new int[ls.size()];
int max =0; //最大数
for(int i=0; i<ls.size(); i++){
ret[i] = test.getNum(ls.get(i).toString(),a);
if(ret[i]>max){
max = ret[i];
}
}
//检查个数最大的,返回位置列表
List ls2 = new LinkedList();
for(int i=0; i<ret.length;i++){
if(ret[i]==max){
ls2.add(i+"");
}
}
//遍历ls2,打印出相应字母和个数
System.out.println("\n打印出个数最多的字母及个数:");
for(int i=0; i<ls2.size(); i++){
int m = Integer.parseInt(ls2.get(i).toString());
System.out.println("字母:"+ls.get(i).toString()+" 个数:"+ret[m]);
}
System.out.println("\n打印出所有字母及个数:");
for(int i=0; i<ret.length;i++){
System.out.println("字母:"+ls.get(i).toString()+" 个数:"+ret[i]);
}
}
//查询该列表 ls 是否有该字符
private boolean isHave(List ls, String k){
boolean flag = false;
for(int i=0; i<ls.size(); i++){
if(ls.get(i).toString().equals(k)){
flag = true;
break;
}
}
return flag;
}
//查询 a 中有几个 k
private int getNum(String k, String a){
int j=0;
for(int i=0; i<a.length(); i++){
if((a.charAt(i)+"").equals(k)){
j++;
}
}
return j;
}
}
运行结果:
打印出个数最多的字母及个数:
字母:a 个数:5打印出所有字母及个数:
字母:a 个数:5
字母:b 个数:2
字母:d 个数:2
字母:c 个数:3
字母:f 个数:2
字母:e 个数:2
字母:s 个数:1
字母:w 个数:1
字母:t 个数:2
字母:r 个数:2
.model flatextrn MessageBoxA:proc
extrn ExitProcess:proc.data
@@datastart equ $
indata db "aaabbdcfeeswdfttrrccaa"
@@dataLen equ ($-@@datastart)
count db @@dataLen dup(0) msg db "出现次数最多的字母是:"
number db 4 dup(32)
db "一共出现了"
times db 4 dup(32)
db "次"
zero db 0
nofind db "出现次数相等"
db 0maxcount db 0
maxnumber db 0
secondcount db 0
secondnumber db 0
.codemain:
lea esi, indata
mov ecx, @@dataLen
total:
xor ebx, ebx
mov ah, byte ptr[esi]
push ecx
mov ecx, @@dataLen
scan:
lea edi, indata
add edi, ebx
mov dh, byte ptr[edi]
cmp dh, ah
je find
inc ebx
loop scan
find:
pop ecx
lea edi, count
add edi, ebx
inc byte ptr[edi]
mov dh, [edi]
cmp ah, maxnumber
;如果是出现次数最多的数
je max
cmp dh, maxcount
jb next
jne gt
;个数等于
mov secondcount, dh
mov secondnumber, ah
jmp next
;大于
gt:
mov maxcount, dh
mov maxnumber, ah
jmp next
max:
inc maxcount
next:
inc esi
loop total;填写结果
mov dh, maxcount
lea esi, times
add esi, 2
call bititoa
mov al, maxnumber
mov number, al;如果最大出现次数相等
mov ah, maxcount
cmp ah, secondcount
jne displayresult
mov ah, maxnumber
cmp ah, secondnumber
;如果是同一个数
je displayresult
push 0
push offset zero
push offset nofind
push 0
call MessageBoxA
jmp exitdisplayresult:
push 0
push offset zero
push offset msg
push 0
call MessageBoxAexit:
push 0
call ExitProcess;数字转字符
; dh = 输入的数字
; esi = 输出地址
bititoa proc
push ebp
mov ebp, esp
pushad
pushfd
mov cl, 10
mov al, dh
nextnumber:
xor ah, ah
div cl
add ah, 48
mov byte ptr[esi], ah
dec esi
cmp al, 0
jne nextnumber
popfd
popad
pop ebp
ret
bititoa endpend main
编译:
tasm32 /m3 /ml total1,,;
tlink32 /Tpe /aa total1,total1,,d:\tasm\lib\import32.lib
pause
#include <vector>
#include <set>
#include <iostream>
#include <windows.h>#pragma comment(lib, "winmm")
int maxInt()
{
std::multiset<int> s;
int number[] = {1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2};
int cnt = sizeof(number)/sizeof(int);
for (int i=0;i<cnt;i++)
{
s.insert(number[i]);
} int max = 0;
int id = 0; for(int i=0;i<cnt;i++)
{
int tmp;
tmp = s.count(number[i]);
if (max < tmp)
{
max = tmp;
id = i;
}
}
return id;
}void main()
{
int pre = timeGetTime();
int result = maxInt();
int delta = timeGetTime() - pre;
std::cout<<result<<'\n' <<"time: "<<delta<<'\n';}我的方法 时间111毫秒
if instr(abc,"A")>0 then
abctext=split(abc,"A")
for j=0 to ubound(abctext)
next
end if
response.write j-1 j-1就是里面存在A的数量值了