求出現最多的字串和次數,如有多個全部輸出
注:方法有多個這裡只是其中一中。
1.解題思路
(1)引入TreeSet,通過集合找出所有出現的字串
(2)引入ArrayList:快速排序,在通過StringBuffer生成排序後的字串
(3)通過String API中的indexOf()找出第一次出現的下標,lastIndexOf最後一次出現的下標求出其長度。
(4)記錄第一個出現次數最多的字元(為了計算多個字元相同的情況)
(5)求出的字串放入集合中儲存
2.程式碼
public class Demo3 { public void doString(String input){ char[] chars=input.toCharArray();//char型別陣列 ArrayList<String> lists=new ArrayList<String>(); TreeSet<String> set=new TreeSet<String>(); for (int i = 0; i < chars.length; i++) { lists.add(String.valueOf(chars[i])); set.add(String.valueOf(chars[i])); } Collections.sort(lists); System.out.println(lists); System.out.println(set); StringBuffer sb=new StringBuffer(); for (int i = 0; i < lists.size(); i++) { sb.append(lists.get(i)); } String input1 = sb.toString(); //排序後的字串 String input2 = lists.toString();//直接liststoString是不行的我們可以看後面的下標列印情況 System.out.println(input1); int max=0; // 記錄最大的數 String maxString=""; ArrayList<String> maxList=new ArrayList<String>(); // 儲存最大的字串 Iterator<String> iterator = set.iterator(); while(iterator.hasNext()){ String str = iterator.next();// 迭代器迭代每個不重複的字元 System.out.println("---------這是lists直接toString的下標------------"); System.out.println(input2.indexOf(str)); int begin = input1.indexOf(str); int end = input1.lastIndexOf(str); int length=end-begin+1; if(length>max){ max=length; maxString=str; //去重複因為我們只需要匹配最大的字元 maxList.add(str); } else if(length==max){ maxList.add(str); } } int index=0; for (int i = 0; i < maxList.size(); i++) { if(maxList.get(i).equals(maxString)){ index=i; break; } } System.out.println("出現次數最多的為"); for (int i = index; i < maxList.size(); i++) { System.out.println(maxList.get(i)+"出現"+max); } } public static void main(String[] args) { new Demo3().doString("dsdsadaa"); }
3.執行結果
4.為什麼直接list直接toString不行呢?因為我們從他的原始碼可以看出作為字串的方法他是包含了括號和“,”以及空格的所以輸出的下標為1 ,10 ,19(每個字母第一次出現的下標)
相關推薦
求出現最多的字串和次數,如有多個全部輸出
注:方法有多個這裡只是其中一中。 1.解題思路 (1)引入TreeSet,通過集合找出所有出現的字串 (2)引入ArrayList:快速排序,在通過StringBuffer生成排序後的字串 (3)通過String API中的indexOf()找出第一次出現的下標,lastI
給定字串,求出現次數最多的那個字母及次數,如有多個重複則都輸出
給定字串,求出現次數最多的那個字母及次數,如有多個 重複則都輸出。 eg,String data ="aaavzadfsdfsdhshdWashfasdf"; 這是一道很基礎的面試題,在別的部落格上也
小菜鳥之搭建環境(IntelliJ IDEA+Springboot+Gradle4.8+Git2.19+JDK1.8) 僅供大家學習和交流,如有疏漏,敬請留言
一、IntelliJ IDEA 1.1 IDEA介紹 IDEA 全稱 IntelliJ IDEA,是java程式語言開發的整合環境。IntelliJ在業界被公認為最好的java開發工具之一。支援多種外掛的配置,使程式碼更簡潔。工作中接
UVALive - 3938 分治,線段樹,求動態最大連續和
click typedef %d make pac comment blank eof return UVALive - 3938 題意: 給出一個長度為n的整數序列D,你的任務是對m個詢問作出回答。對於詢問(a,b),需要找到兩個下標x和y,使得a≤x≤y&
輸入兩個正整數m和n,求其最大公約數和最小公倍數。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int a = scanner.nextInt
C語言例項—輸入兩個正整數m和n,求其最大公約數和最小公倍數(gcc 編譯)。
1.輾轉相除法 輾轉相除法是古希臘求兩個正整數的最大公約數的,也叫歐幾里德演算法,其方法是用較大的數除以較小的數,上面較小的除數和得出的餘數構成新的一對數,繼續做上面的除法,直到出現能夠整除的兩個數,其中較小的數(即除數)就是最大公約數。以求288和123的最大公約數為例,操作如下: 288÷1
【程式6】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
在迴圈中,只要除數不等於0,用較大數除以較小的數,將小的一個數作為下一輪迴圈的大數,取得的餘數作為下一輪迴圈的較小的數,如此迴圈直到較小的數的值為0,返回較大的數,此數即為最大公約數,最小公倍數為兩數之積除以最大公約數。 import java.util.Scanner;
鍵入兩個數,求其最大公約數和最小公倍數----初學c
#include <stdio.h> void fun1(int *x,int *y); //將兩個數比較大小,使x>y void fun2(int *a,int *b); //輾轉反側法 void main() { /*定義變數*
輸入兩個正整數m和n,求其最大公約數和最小公倍數 C/C++
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 1.程式分析:利用輾除法。 2.程式原始碼: #include <stdio.h> int main() { int a,b,num1,num2,temp; printf("請輸入2個正整數:\
【程式6】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
/* 2017年3月2日15:10:11 java基礎50道經典練習題 例6 Author:ZJY(&&) Purpose:最大公約數和最小公倍數的應用 最大公約數:把每個數分別分解質因數,再把各數中的全部公有質 因數提取出來連乘,所得的積就
c語言:輸入兩個正整數m和n,求其最大公約數和最小公倍數
輸入兩個正整數m和n,求其最大公約數和最小公倍數。解:程式:#include <stdio.h>int main(){int num1, num2, t,p;printf("請輸入兩個正整數
(c++)輸入兩個正整數m和n,求其最大公約數和最小公倍數。
#include<iostream> using namespace std; int main() {int m,n,i,j,a;cin>>m>>n;j=m*n;
【程式16】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> /* 【程式16】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 【分析】 最大公約數:輾除法 最小公倍數:兩數之積除以最大公約數 */ int main(int argc,
C語言例項12——輸入兩個正整數m和n,求其最大公約數和最小公倍數。
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 //程式分析:利用輾除法。 #include<stdio.h> int main(){ int a,b,num1,num2,te
輸入兩個正整數m和n,求其最大公約數和最小公倍數(java)
package com.gaoshixian; import java.util.Scanner; public class Test { public static void main(String[] args) { int a, b, num1, num2,
夜讀 | 讀書和不讀書的人生,差別有多大
important 陽光 scene vertical 訂閱 ica 鞋子 80年 pla 夜讀 | 讀書和不讀書的人生,差別有多大 2017-08-02新華社導讀讀書讓人擁有富足的內心,那是千金不換的財富。- 1 -我剛畢業時被分到一所鄉村中學任教,那年百年一遇的大洪
element ui 的Notification通知如何加 a 標簽和按鈕,並彈多個
都是 ast pkg 前言 asc scrip 如何 pos close 前言:工作中需要在頁面右下角彈出很多個提醒框,提醒框上有一個可點擊的a標簽,並有一個按鈕,同時還需要一次性關閉所有的彈出框。轉載請註明出處:https://www.cnblogs.com/yuxia
[WC2011]最大XOR和路徑,洛谷P4151,線性基+Dfs
正題 這一題挺水的? 直接隨便求一條1到n的路徑異或和,建出Dfs樹,每一條返祖邊與兩點之間路徑異或和組成環,扔進線性基,最後維護一遍即可。 首先證明為什麼只
【程式設計網格無水題】【動態規劃篇】之【最大字串和】
Written By MorrowWind,csdnicewing 可以到洛谷的P115上去練習 https://www.luogu.org/problemnew/show/P1115 題目描述 給出資料個
UVA-11107 Life Forms(求出現K次的子串,後綴數組+二分答案)
add src break 數組 nbsp line 技術 字符串長度 http 題解: 題意: 輸入n個DNA序列,你的任務是求出一個長度最大的字符串,使得它在超過一半的DNA序列中出現。如果有多解,按照字典序從小到大輸入所有解。 把n個DNA序列拼在一起,中間