문자 중복 체크와 중복 제거방식을 정리해보았습니다.
/**
* 문자 중복 체크 -> 중복되면 "D" 아니면 "U"
*/
public String solution(String str) {
String answer = "D";
String tmp = "";
for (char c : str.toCharArray()) {
// 포함되지 않는다면
if (!tmp.contains(String.valueOf(c))) {
tmp += String.valueOf(c); // 이것까지 반드시 붙여줘야 함!
answer = "U";
}
}
return answer;
}
HashMap(순서보장x, 중복을 허용하여 카운트하기)
map의 getOrDefault()
사용
public String solution(String str) {
String answer = "D";
Map<Character, Integer> map = new HashMap<>();
for (char c : str.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1); // 중복되면 +1, 중복된것이 없으면 0 -> +1 해서 1
if (!(map.get(c) > 1)) { // 중복되지 않는건 초기화
map.put(c, map.get(x) - 1);
answer = "U";
}
}
return answer;
}
String str = "hellooooo";
// 중복 단어 찾기
Map<Character, Integer> map = new HashMap<>();
for (char x : str.toCharArray()) {
map.put(x, map.getOrDefault(x, 0) + 1);
}
int maxCount = 0;
char maxChar = '?';
// 가장 많이 중복된 단어 찾기
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() > maxCount) {
maxChar = entry.getKey();
maxCount = entry.getValue();
}
}
System.out.println("maxChar = " + maxChar);
putIfAbsent()
이용 Map<Character, Integer> map1 = new HashMap<>();
for (Character c : str.toCharArray()) {
map1.putIfAbsent(c, 0);
map1.put(c, map1.get(c) + 1);
}
map1.forEach((key, value) -> System.out.println(key + " : " + value));
// 단순 단어 중복 문자 카운트 값 저장
String str = "java";
Map<String, Integer> map = new LinkedHashMap<>(); // vs TreeMap => 오름차순 정렬해주는 map
for (String s : str.split("")) {
Integer count = map.get(s);
if (count == null) {
map.put(s, 1);
} else {
map.put(s, count + 1);
}
}
for (String key : map.keySet()) {
System.out.println(key + ": "+ map.get(key));
}
// j: 1
// a: 2
// v: 1
// 1. 중복 제거 (Set 이용)
String[] report = {"muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"};
HashSet<String> reportSet = new HashSet<>();
for (String rep : report) {
reportSet.add(rep);
}
// Set -> iterator 반복 출력
Iterator<String> iterator = reportSet.iterator();
while (iterator.hasNext()) {
String data = iterator.next();
System.out.println("data: "+data);
}
LinkedHashSet(순서보장 O : 입력된 순서대로)
TreeSet(순서보장 O : 정렬(오름차순)이되는 Set)
// 1. 중복 제거 (Set 이용)
String[] report = {"muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"};
HashSet<String> reportSet = new TreeSet<>();
for (String rep : report) {
reportSet.add(rep);
}
// Set -> iterator 반복 출력
Iterator<String> iterator = reportSet.iterator();
while (iterator.hasNext()) {
String data = iterator.next();
System.out.println("data: "+data);
}
List<String> li = new ArrayList(
Arrays.asList("A", "B", "B", "C", "D", "D")
);
List<String> distinctLi = li.stream()
.distinct() // 중복제거
.sorted() // 정렬(오름차순)
.collect(Collectors.toList()); // 다시 List 반환할려면 꼭 해줘야!
// for (String distinctElement : distinctLi) {
// li.remove(distinctElement); // 찾아서 제거하기
// }
System.out.println(li);
/** 실행결과
[B, D]
**/