1. 程式人生 > >尋找字串中出現次數最多的字元java

尋找字串中出現次數最多的字元java

今天去一家公司面試,遇到一道面試題。開始以為很簡單,飛快地寫完了給面試官看,面試官一下就挑出了問題,當時太緊張,沒想出來怎麼解決,回來後覺得這麼簡單的題都做不出來,還怎麼做一個優秀的程式設計師。花了30分鐘,輕鬆解決。

首先這道面試題初一看很簡單,尋找出字串中出現次數最多的字元,例如:aaaaaac,輸出a;如果出現次數一樣多,那麼輸出先達到次數的字元,例如:abcdefghijklba,輸出b(變種:輸出先出現的字元,其實解決思路一樣)。我看網上很多回答都是用HashMap,但是找出最大值後,如果有多個最大值你怎麼找到最先達到次數的字元呢?很多人就會想,再弄一個數組或者HashMap記錄下他最後出現的位置,如果你真這麼想,那麼你的演算法就是一坨屎。這道題目得換一種角度來思考!!!

我們在剛開始遍歷字串記錄次數的時候,能不能順便就記下他的位子呢?如果你這麼想,那麼這道題目就迎刃而解了。我的想法是,用兩個list,一個記他的順序,另一個記他的次數,他們的index是對應的。話不多說,我們看程式碼:

import java.util.ArrayList;
import java.util.List;
/**
 * 
 * @author Lance
 *
 */
public class FindCharTest {
	public static void main(String[] args) {
          String s="abcdefghijklba";
          System.out.println(findCharMost(s));
	}
	public static char findCharMost(String s) {
		//記錄字串中的字元
		List<Character> list=new ArrayList<>();
		//記錄對應字元出現的次數
		List<Integer> list2=new ArrayList<>();
		//因為題目要求最先達到次數,那麼我就倒著來遍歷字串
		//那麼記錄順序的list中就有字串的順序了
		for(int i=s.length()-1;i>=0;i--){
			if(!list.contains(s.charAt(i))) {
				//如果字元沒有出現過,那麼add到list中
			    list.add(s.charAt(i));
			    //同時在list2對應位置賦值為1
			    list2.add(1);
			}else {
				//如果字元出現過,那麼找到其對應的index
				int index=list.indexOf(s.charAt(i));
				//在list2對應位置將次數++
				list2.set(index,list2.get(index)+1);
			}
		}
		int max=list2.get(list2.size()-1);
		int j=list2.size()-1;
		//記錄順序的list中是按後到的字元放在前面的順序
		//所以我們只要倒著遍歷找到最大值就可以了
		for(int i=list2.size()-2;i>=0;i--){
			if(list2.get(i)>max){
				max=list2.get(i);
				j=i;
			}
		}
		return list.get(j);
	}
}

轉載請宣告出處和作者,謝謝!!

相關推薦

尋找字串出現次數字元java

今天去一家公司面試,遇到一道面試題。開始以為很簡單,飛快地寫完了給面試官看,面試官一下就挑出了問題,當時太緊張,沒想出來怎麼解決,回來後覺得這麼簡單的題都做不出來,還怎麼做一個優秀的程式設計師。花了30分鐘,輕鬆解決。 首先這道面試題初一看很簡單,尋找出字串中出現次數最多的

(ES6的“...“配合ES5‘’forEach‘’)前端面試之判斷一個字串出現次數字元,統計這個次數

// 判斷一個字串中出現次數最多的字元,統計這個次數 let str = 'aasdadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsdasjjhsghkafsagjkg

演算法練習08 找出字串出現次數字元

題目 找出一個字串中出現次數最多的字元 const str = 'asdfaaaa' 最後的返回值是字串'a' 實現 嗯,我略加思考(半個小時左右),給出了一個複雜的方案,一個屎一般的方案 屎一般的方案 我的方案是利用redcue,計算出了每個字串出現的頻次

js 判斷一個字串出現次數字元,統計其出現次數

js 判斷一個字串中出現次數最多的字元,統計其出現次數 var str = 'asdfssaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!json[str.charAt(i

判斷一個字串出現次數字元,統計這個次數

var str = 'asdfssaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!json[str.charAt(i)]){ json[str.cha

java輸出一個字串出現次數字元以及次數

1 先把字串轉化為陣列 .toCharArray 2 定義一個數組count[i] 存取每個字元 以及數量 count[i]++ 3 計算每個字元 以及值 4 取count的最大值 public class MaxString { public sta

字串出現次數字元 JAVA

題目描述 求任意給定字串中出現次數最多的字元,如果出現最多次數的字元有多個,則只輸出最先出現的字元。 輸入描述 輸入任意一個字串(不超過100個字元) 輸出描述 輸出出現次數最多的字元。 輸入樣例 this is c++ program

js演算法:找出一個字串出現次數字元

在其他部落格裡面看到了一種方法: 這個方法很簡單,但是15-20行程式碼對於萌新來說,不是很好理解,因此我給出了以下這個方案,先想辦法統計出所有字母各出現的次數,然後把這些次數push到一個數組裡面,找出最大的那個數(我這裡是通過排序找出的最大數),最大數有了,該數對應的字元不就很容易

Python 實現 找出一個字串出現次數字元並輸出該字元

'''演算法題二: 找出一個字串中出現次數最多的字正確的解決思路是: 利用collections 工具中的Counter,對列表中元素出現的頻率進行排序。 Counter返回值是一個按元素出現頻率降序排列的Counter物件,它是字典的子類,因此可以使用字典的方法'''fro

檢視字串出現次數字元以及出現次數

  這裡先補充一下物件的知識點:   例如  var  json = {       a:1,       b:2,       c:3       }     console.log(json)     //  &n

華為上機試題(java)找出一個字串出現次數字元

 Java求字串中出現次數最多的字元,如String Str = "aaabbcddddee";那麼輸出:d 4 ;若String Str = "aaabbcddddeexxxxxx";那麼輸出:x 6 import java.util.*; import java.uti

判斷字串出現次數得那個字元(面試題)

var str = 'qwertyuilo.,mnbvcsarrrrrrrrtyuiop;l,mhgfdqrtyuio;.cvxsrtyiuo'; var json = {}; //遍歷str拆解其中的每一個字元將其某個字元的值及出現的個數拿出來作為json的kv for (

給定一個長度不限的字串,請找出該字串出現次數的那個字元,並打印出該字元出現次數(C/C++版)

#include<iostream> using namespace std; /** * @brief findchar 給定一個長度不限的字串,請找出該字串中出現次數最多的那個字元,並打印出該字元及出現次數; 如果多個字元的出現次數相同,只打印首個

統計字串出現次數字元及個數

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-eq

python學習第一週 獲取字串出現次數的字母

給定一個包含不同的英文字母和標點符號的文字,找出其中出現最多的字母,檢測時不區分大小寫,並返回一個小寫字母,若存在相同次數的字母,則返回字母表中最先出現的那個。比如find,則返回f #!/usr/bin/python3 #-*- coding:UTF-8 -*- str_input = in

問題6: 找出字串出現次數的字母及其出現次數

這好像是華為機試的一道題目,我採用JAVA來完成,用JAVA也可以用其他方法。 我用一個比較簡單的方法,程式碼如下: public class Str{ public static void main(String[] args){ String str =

JS獲取字串出現次數的字母,常用方法

(1)陣列+物件 <script > var str = 'aafcbad'; var obj = {}; var arr = []; var letter; for(var i = 0,len

查詢字串出現次數的字母和出現次數. 示例: var str =" fdadffddfdffj"; ====> 出現次數的是f, 出現了 6 次;

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script> var a =

JS判斷陣列或者一個字串出現次數的元素及其出現次數

1. 判斷一個字串中出現次數最多的字母:function maxCount(str) {      var obj={};    for(var i=0;i<str.length;i++){          var key=str[i];          if(ob

字串出現次數的字母及次數

import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.TreeSet; public class JavaTest1 {