Как найти наиболее часто встречающийся символ в строке с Java?

Вопрос: Учитывая абзац в качестве входных данных, найдите наиболее часто встречающийся символ. Обратите внимание, что случай символа не имеет значения. Если более одного символа имеет такую же максимальную частоту, возвращайте все из них, я пытался этот вопрос, но у меня ничего не получилось. Ниже приведен код, который я пробовал, но у него много ошибок, которые

Вопрос:

Учитывая абзац в качестве входных данных, найдите наиболее часто встречающийся символ. Обратите внимание, что случай символа не имеет значения. Если более одного символа имеет такую же максимальную частоту, возвращайте все из них, я пытался этот вопрос, но у меня ничего не получилось. Ниже приведен код, который я пробовал, но у него много ошибок, которые я не могу исправить:

public class MaximumOccuringChar { static String testcase1 = «Hello! Are you all fine? What are u doing today? Hey Guyz,Listen! I have a plan for today.»; public static void main(String[] args) { MaximumOccuringChar test = new MaximumOccuringChar(); char[] result = test.maximumOccuringChar(testcase1); System.out.println(result); } public char[] maximumOccuringChar(String str) { int temp = 0; int count = 0; int current = 0; char[] maxchar = new char[str.length()]; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); for (int j = i + 1; j < str.length(); j++) { char ch1 = str.charAt(j); if (ch != ch1) { count++; } } if (count > temp) { temp = count; maxchar[current] = ch; current++; } } return maxchar; } } Лучший ответ:

Вы уже получили свой ответ: qaru.site/questions/1526697/…

Это самый простой способ, который я могу себе представить.

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MaximumOccurringChar { static final String TEST_CASE_1 = «Hello! Are you all fine? What are u doing today? Hey Guyz,Listen! I have a plan for today. Help!»; public static void main(String[] args) { MaximumOccurringChar test = new MaximumOccurringChar(); List<Character> result = test.maximumOccurringChars(TEST_CASE_1, true); System.out.println(result); } public List<Character> maximumOccurringChars(String str) { return maximumOccurringChars(str, false); } // set skipSpaces true if you want to skip spaces public List<Character> maximumOccurringChars(String str, Boolean skipSpaces) { Map<Character, Integer> map = new HashMap<>(); List<Character> occurrences = new ArrayList<>(); int maxOccurring = 0; // creates map of all characters for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (skipSpaces && ch == ‘ ‘) // skips spaces if needed continue; if (map.containsKey(ch)) { map.put(ch, map.get(ch) + 1); } else { map.put(ch, 1); } if (map.get(ch) > maxOccurring) { maxOccurring = map.get(ch); // saves max occurring } } // finds all characters with maxOccurring and adds it to occurrences List for (Map.Entry<Character, Integer> entry : map.entrySet()) { if (entry.getValue() == maxOccurring) { occurrences.add(entry.getKey()); } } return occurrences; } } Ответ №1

Почему бы вам просто не использовать N буквенных ковшей (N = количество букв в алфавите)? Просто пройдите по строке и увеличьте соответствующее буквенное ведро. Сложность времени O (n), пространственная сложность O (N)

Ответ №2import java.util.Scanner; public class MaximumOccurringChar{ static String testcase1 = «Hello! Are you all fine? What are u doing today? Hey Guyz,Listen! I have a plan for today.»; public static void main(String[] args) { MaximumOccurringChar test = new MaximumOccurringChar(); String result = test.maximumOccuringChar(testcase1); System.out.println(result); } public String maximumOccuringChar(String str) { int temp = 0; int count = 0; int current = 0; int ind = 0; char[] arrayChar = {‘a’,’b’ , ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’}; int[] numChar = new int[26]; char ch; String s=»»; str = str.toLowerCase(); for (int i = 0; i < 26; i++) { count = 0; for (int j = 0; j < str.length(); j++) { ch = str.charAt(j); if (arrayChar[i] == ch) { count++; } } numChar[i] = count++; } temp = numChar[0]; for (int i = 1; i < numChar.length; i++) { if (temp < numChar[i]) { temp = numChar[i]; ind = i; break; } } System.out.println(numChar.toString()); for(int c=0;c<26;c++) { if(numChar[c]==temp) s+=arrayChar[c]+» «; } return s; } } Ответ №3

Алгоритм:-

  1. Копирование символа String по символу в LinkedHashMap.

    • Если его новый символ затем вставить новый символ, 1.
    • Если символ уже присутствует в LinkedHashMap, обновите значение, увеличив его на 1.
  2. Итерация по записи одна за другой и сохранение ее в объекте Entry.

    • Если значение ключа, сохраненного в объекте ввода, больше или равно текущей записи, ничего не делайте
    • Else, сохраните новую запись в объекте Entry
  3. После прокрутки просто напечатайте ключ и значение из объекта Entry.

public class Characterop {

public void maxOccur(String ip) { LinkedHashMap<Character, Integer> hash = new LinkedHashMap(); for(int i = 0; i<ip.length();i++) { char ch = ip.charAt(i); if(hash.containsKey(ch)) { hash.put(ch, (hash.get(ch)+1)); } else { hash.put(ch, 1); } } //Set set = hash.entrySet(); Entry<Character, Integer> maxEntry = null; for(Entry<Character,Integer> entry : hash.entrySet()) { if(maxEntry == null) { maxEntry = entry; } else if(maxEntry.getValue() < entry.getValue()) { maxEntry = entry; } } System.out.println(maxEntry.getKey()); } public static void main(String[] args) { Characterop op = new Characterop(); op.maxOccur(«AABBBCCCCDDDDDDDDDD»); }

}

Ответ №4

Решение Big O ниже просто o (n). Пожалуйста, поделитесь своим мнением об этом.

public class MaxOccuringCahrsInStr { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str = «This is Sarthak Gupta»; printMaxOccuringChars(str); } static void printMaxOccuringChars(String str) { char[] arr = str.toCharArray(); /* Assuming all characters are ascii */ int[] arr1 = new int[256]; int maxoccuring = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] != ‘ ‘) { // ignoring space int val = (int) arr[i]; arr1[val]++; if (arr1[val] > maxoccuring) { maxoccuring = arr1[val]; } } } for (int k = 0; k < arr1.length; k++) { if (maxoccuring == arr1[k]) { char c = (char) k; System.out.print(c + » «); } } } } Ответ №5function countString(ss) { var maxChar=»; var maxCount=0; for(var i=0;i<ss.length;i++) { var charCount=0; var localChar=» for(var j=i+1;j<ss.length;j++) { if(ss[i]!=’ ‘ && ss[i] !=maxChar) if(ss[i]==ss[j]) { localChar=ss[i]; ++charCount; } } if(charCount>maxCount) { maxCount=charCount; maxChar=localChar; } } alert(maxCount+»»+maxChar) } Ответ №6

Другой способ решить эту проблему. Проще.

public static void main(String[] args) { String str= «aaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcddddeeeeee»; String str1 = «dbc»; if(highestOccuredChar(str) != ‘ ‘) System.out.println(«Most Frequently occured Character ==> » +Character.toString(highestOccuredChar(str))); else System.out.println(«The String doesn’t have any character whose occurance is more than 1»); } private static char highestOccuredChar(String str) { int [] count = new int [256]; for ( int i=0 ;i<str.length() ; i++){ count[str.charAt(i)]++; } int max = -1 ; char result = ‘ ‘ ; for(int j =0 ;j<str.length() ; j++){ if(max < count[str.charAt(j)] && count[str.charAt(j)] > 1) { max = count[str.charAt(j)]; result = str.charAt(j); } } return result; } Ответ №7public void countOccurrence(String str){ int length = str.length(); char[] arr = str.toCharArray(); HashMap<Character, Integer> map = new HashMap<>(); int max = 0; for (char ch : arr) { if(ch == ‘ ‘){ continue; } if (map.containsKey(ch)) { map.put(ch, map.get(ch) + 1); } else { map.put(ch, 1); } } Set<Character> set = map.keySet(); for (char c : set) { if (max == 0 || map.get(c) > max) { max = map.get(c); } } for (Character o : map.keySet()) { if (map.get(o).equals(max)) { System.out.println(o); } } System.out.println(«»); } public static void main(String[] args) { HighestOccurence ho = new HighestOccurence(); ho.countOccurrence(«aabbbcde»); } Ответ №8public void stringMostFrequentCharacter() { String str = «My string lekdcd dljklskjffslk akdjfjdkjs skdjlaldkjfl;ak adkj;kfjflakj alkj;ljsfo^wiorufoi$*#&$ *******»; char[] chars = str.toCharArray(); //optionally — str.toLowerCase().toCharArray(); int unicodeMaxValue = 65535; // 4 bytes int[] charCodes = new int[unicodeMaxValue]; for (char c: chars) { charCodes[(int)c]++; } int maxValue = 0; int maxIndex = 0; for (int i = 0; i < unicodeMaxValue; i++) { if (charCodes[i] > maxValue) { maxValue = charCodes[i]; maxIndex = i; } } char maxChar = (char)maxIndex; System.out.println(«The most frequent character is >» + maxChar + «< — # of times: » + maxValue); } Ответ №9

Для Simple String Manipulation эта программа может быть выполнена как:

package abc; import java.io.*; public class highocc { public static void main(String args[])throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println(«Enter any word : «); String str=in.readLine(); str=str.toLowerCase(); int g=0,count,max=0;; int ar[]=new int[26]; char ch[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’}; for(int i=0;i<ch.length;i++) { count=0; for(int j=0;j<str.length();j++) { char ch1=str.charAt(j); if(ch[i]==ch1) count++; } ar[i]=(int) count; } max=ar[0]; for(int j=1;j<26;j++) { if(max<ar[j]) { max=ar[j]; g=j; } } System.out.println(«Maximum Occurence is «+max+» of character «+ch[g]); } }

Пример Input1: Pratik – хороший программист

Пример Output1: Максимальное Происхождение 3 символа a

Пример Input2: привет WORLD

Образец Output2: Максимальное Происхождение 3 символа l

Ответ №10maxOccu m = new maxOccu(); String str = «moinnnnaaooooo»; char[] chars = str.toCharArray(); Arrays.sort(chars); str = new String(chars); System.out.println(str); m.maxOccurence(str); void maxOccurence(String str) { char max_char = str.charAt(0), cur_char, prev = str.charAt(0); int cur_count = 0, max_count = 0, n; n = str.length(); for (int i = 0; i < n; i++) { cur_char = str.charAt(i); if (cur_char != prev) cur_count = 0; if (str.charAt(i) == cur_char) { cur_count++; } if (cur_count > max_count) { max_count = cur_count; max_char = cur_char; } prev = cur_char; } System.out.println(max_count + «» + max_char); } Ответ №11public class HigestOccurredCharTest { public static void main(String[] args) { System.out.println(«Enter the char string to check higest occurrence»); Scanner scan = new Scanner(System.in); String str = scan.next(); if(str != null && !str.isEmpty()){ Map<Character, Integer> map = countOccurrence(str); getHigestOccurrenceChar(map); }else{ System.out.println(«enter valid string»); } } public static Map<Character, Integer> countOccurrence(String str){ char strArr[] = str.toCharArray(); Map<Character, Integer> map = new HashMap<Character , Integer>(); for (Character ch : strArr) { if(map.containsKey(ch)){ map.put(ch, map.get(ch)+1); }else{ map.put(ch, 1); } } return map; } public static void getHigestOccurrenceChar(Map<Character, Integer> map){ Character ch = null; Integer no = 0; Set<Entry<Character, Integer>> entrySet = map.entrySet(); for (Entry<Character, Integer> entry : entrySet) { if(no != 0 && ch != null){ if(entry.getValue() > no){ no = entry.getValue(); ch = entry.getKey(); } }else{ no = entry.getValue(); ch = entry.getKey(); } } System.out.println(ch+ » Higest occurrence char is «+ no); } } Ответ №12

Попробуйте: –

string inputString = «COMMECEMENT»; List<Tuple<char, int>> allCharListWithLength = new List<Tuple<char, int>>(); List<char> distinchtCharList = inputString.Select(r => r).Distinct().ToList(); for (int i = 0; i < distinchtCharList.Count; i++) { allCharListWithLength.Add(new Tuple<char, int>(distinchtCharList[i], inputString.Where(r => r == distinchtCharList[i]).Count())); } Tuple<char, int> charWithMaxLength = allCharListWithLength.Where(r => r.Item2 == allCharListWithLength.Max(x => x.Item2)).FirstOrDefault(); Ответ №13

Этот метод позволяет найти наиболее часто встречающийся символ в строке:

public char maximumOccuringChar(String str) { return str.chars() .mapToObj(x -> (char) x) // box to Character .collect(groupingBy(x -> x, counting())) // collect to Map<Character, Long> .entrySet().stream() .max(comparingByValue()) // find entry with largest count .get() // or throw if source string is empty .getKey(); } Ответ №14

Вопрос: Часто встречающийся символ в строке

Метод 1: Использование HashMap

public class t1{ public static void main(String a[]){ Map<Character, Integer> map = new HashMap<>(); String a1 = «GiinnniiiiGiiinnnnnaaaProtijayi»; for(char ch : a1.toCharArray()) {map.put(ch, map.getOrDefault(ch,0)+1);}//for System.out.println(map); char maxchar = 0 ; int maxvalue = Collections.max(map.values()); System.out.println(«maxvalue => » + maxvalue); for( Entry<Character,Integer> entry : map.entrySet()) { if(entry.getValue() == maxvalue) { System.out.println(«most frequent Character => » + entry.getKey()); } }//for } }

Способ 2. Использование подсчета алфавитов в Python

str = «GiinnniiiiGiiinnnnnaaaProtijayi»; count = [0]*256 maxcount= -1 longestcharacter =»» # Traversing through the string and maintaining the count of # each character for ch in str:count[ord(ch)] += 1; for ch in str: if( maxcount < count[ord(ch)] ): maxcount = count[ord(ch)] longestcharacter = ch print(longestcharacter) print(maxcount)

IN Java:

public class t1{ public static void main(String[] args) { String a = «GiinnniiiiGiiinnnnnaaaProtijayi»; int[] count = new int[256]; for (int i = 0; i < a.length(); i++) { char ch = a.charAt(i); count[ch] +=1; }//for int maxcount = -1 ; char longest = 0 ; for( char ch : a.toCharArray()) { if(count[ch] > maxcount) { maxcount = count[ch]; longest = ch ; }//if }//for System.out.println(longest); System.out.println(maxcount); }//main }

Метод 3: Использование collections.Counter(). Most_common()

import collections a = «GiinnniiiiGiiinnnnnaaaProtijayi»; fullDictionary = collections.Counter(a).most_common() FirstElementWithCount = fullDictionary[0] print(FirstElementWithCount) FirstElementWithoutCount = FirstElementWithCount[0] print(FirstElementWithoutCount)

Метод 4: Использование отсортированного и ключевого = lambda ch: ch [1]

a = «GiinnniiiiGiiinnnnnaaaProtijayi»; d = {} for ch in a: d[ch] = d.get(ch, 0) + 1 fullDictionary = sorted(d.items(), key=lambda ch :ch[1], reverse=True) print(fullDictionary) FirstElement = fullDictionary[0][0] print(FirstElement) Ответ №15package com.practice.ArunS; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class HighestFrequencyElement { /* * CONTENTSERV=N(2),T(2),E(2) SearchSort=S(2),r(2) * HighestFrequencyElement=E(5) */ public static void main(String[] args) { String str = «CONTENTSERV»; findHighestFrequencyElement(str); } private static void findHighestFrequencyElement(String str) { System.out.println(«Original String:» + str); Map<String, Integer> myMap = new TreeMap<String, Integer>(); char[] ch = str.toCharArray(); for (int i = 0; i < str.length(); i++) { if (myMap.containsKey(Character.toString(ch[i]))) { Integer value = myMap.get(Character.toString(ch[i])); myMap.replace(Character.toString(ch[i]), ++value); } else { myMap.put(Character.toString(ch[i]), 1); } } // end of foor loop Comparator<Entry<String, Integer>> valueComparator = new Comparator<Entry<String, Integer>>() { @Override public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) { Integer v1 = e1.getValue(); Integer v2 = e2.getValue(); return v2-v1; } }; // Sort method needs a List, so let first convert Set to List in Java List<Entry<String, Integer>> listOfEntries = new ArrayList<Entry<String, Integer>>(myMap.entrySet()); // sorting HashMap by values using comparator Collections.sort(listOfEntries, valueComparator); for(int i=0;i<listOfEntries.size();i++){ if(listOfEntries.get(0).getValue()==listOfEntries.get(i).getValue()){ System.out.println(listOfEntries.get(i)); } } }//end of method }

Оцените статью
Добавить комментарий