문제 : 숫자로 구성된 문자열을 정수로 변환
public class StringToInt {
public static int convert(String s) {
s = s.trim();
return Integer.parseInt(s);
}
}
solution
public class StringToInt {
public static int convert(String s) {
char[] ca = s.toCharArray();
int num = 0;
// 123
for(char c : ca){
num *=10;
num += c - '0'; // get int value from char
}
return num;
}
}
문제 : 주어진 문자열에서 모든 문자가 유일한지 판단
import java.util.HashSet;
public class UniqChar {
public static boolean isUniqChar(String s) {
char[] ca = s.toCharArray();
HashSet se = new HashSet();
boolean res = false;
for(char c : ca){
if(se.contains(c)){
res = false;
break;
}
se.add(c);
res = true;
}
return res;
}
}
2 solutions
import java.util.HashSet;
public class UniqChar {
public static boolean isUniqChar(String s) {
/**
* 1. boolean[]
* 2. HashSet
*/
HashSet<Character> se = new HashSet<Character>();
for(char c : s.toCharArray()){
if(se.contains(c)){
return false;
}
se.add(c);
}
return true;
}
}
문제 : 두 문자열에 대해 아나그램 여부 판단
- 문제길이 적당하며, 문자열을 얼마나 컨트롤 하는지 파악가능
import java.util.HashMap;
public class Anagram {
public static boolean isAnagram(String s1, String s2) {
// If two strings are in anagram relationship, the length of two string should be same.
if(s1.length() != s2.length()){
return false;
}else{
HashMap<Character, Integer> s1_map = new HashMap<Character, Integer>();
char[] s1_ca = s1.toCharArray();
char[] s2_ca = s2.toCharArray();
// O(n)
for(int i=0; i < s1_ca.length; i++){
if(!s1_map.containsKey(s1_ca[i])){
s1_map.put(s1_ca[i], 0);
}else{
s1_map.put(s1_ca[i], s1_map.get(s1_ca[i]) + 1);
}
}
// O(n)
for(int i =0; i< s2_ca.length; i++){
if(!s1_map.containsKey(s2_ca[i])) return false;
}
// --> O(2n) = O(n)
}
return true;
}
}
solution
import java.util.HashMap;
public class Anagram {
public static boolean isAnagram(String s1, String s2) {
// Try 정수 배열
if(s1.length() != s2.length()){
return false;
}else{
HashMap<Character, Integer> s1_map = new HashMap<Character, Integer>();
char[] s1_ca = s1.toCharArray();
char[] s2_ca = s2.toCharArray();
for(int i=0; i < s1_ca.length; i++){
if(!s1_map.containsKey(s1_ca[i])){
s1_map.put(s1_ca[i], 0);
}else{
s1_map.put(s1_ca[i], s1_map.get(s1_ca[i]) + 1);
}
}
for(int i =0; i< s2_ca.length; i++){
if(!s1_map.containsKey(s2_ca[i])) return false;
}
}
return true;
}
}
문제 : Compact string - Runlength
import java.util.HashMap;
public class RunLengthCode {
public static String coding(String s) {
HashMap<Character, Integer> retMap = new HashMap<Character, Integer>();
String retStr = "";
for(char c : s.toCharArray()){
if(!retMap.containsKey(c))
retMap.put(c, 1);
else
retMap.put(c, retMap.get(c) + 1);
}
for(char c : retMap.keySet()){
retStr += String.valueOf(c) + String.valueOf(retMap.get(c));
}
return retStr;
}
}
solution
public class RunLengthCode {
//aaaabbcccc
public static String coding(String s) {
if (s == null) return null;
char[] ca = s.toCharArray();
String result = "";
int count = 1;
char prev = ca[0];
for(int i = 1; i<ca.length; i++){
if(prev == ca[i]){
count++;
}else{
result = result + prev+count;
count = 1;
prev = ca[i];
}
}
result = result+ prev + count;
return result;
}
}
문제 : WordCount
import java.util.HashMap;
public class WordCount {
private HashMap<String, Integer> map;
public WordCount(){
map = new HashMap<String, Integer>();
}
public void read(String[] doc) {
for(String s : doc){
if(!map.containsKey(s)){
map.put(s, 1);
}else {
map.put(s, map.get(s) +1);
}
}
}
public int getCount(String word) {
/*
int cnt = 0;
if(map.containsKey(word)){
cnt = map.get(word);
}
return cnt;
*/
if(map.get(word) == null)
return 0;
else
return map.get(word);
}
}