알고리즘 과 데이터 구조 면접 문제 (21) - 한 문자열 에서 첫 번 째 로 한 번 만 나타 나 는 문 자 를 찾 습 니 다.
。 abaccdeff, b。
문제 풀이 의 사고 방향.
지난 문 제 는 문자열 에 있 는 각 문자 의 개 수 를 구 하 는 것 이 었 습 니 다. 사실은 대동소이 합 니 다. 이 문 제 는 지난 문제 보다 더 간단 합 니 다. 첫 번 째 1 을 얻 으 면 끝 납 니 다.비교적 쉽다.하지만 이전 코드 를 개조 해 야 합 니 다.
public class CharCount {
public void count(String str) {
if (str == null || str.length() == 0) {
return;
}
StringBuilder builder = new StringBuilder(str.length());
isContainsChar(str, str.length(), builder);
if (builder.length() == 0) {
System.out.println(" ");
return;
}
// hashmap , O(n)
Map<Character, Integer> countMap = new LinkedHashMap<Character, Integer>();
for (int i = 0; i < builder.length(); i++) {
Character c = builder.charAt(i);
if (countMap.containsKey(c)) {
int num = countMap.get(c);
countMap.put(c, ++num);
} else {
countMap.put(c, 1);
}
}
System.out.println(" : " + builder);
printCountInfo(countMap);
// map
if (!countMap.containsValue(1)) {
System.out.println(" ");
return;
}
Set<Map.Entry<Character, Integer>> set = countMap.entrySet();
Iterator<Entry<Character, Integer>> iterator = set.iterator();
while (iterator.hasNext()) {
Entry<Character, Integer> entry = iterator.next();
if (entry.getValue() == 1) {
System.out.println(" : "
+ entry.getKey());
return;
}
}
}
private void isContainsChar(String str, int length, StringBuilder builder) {
str = str.toLowerCase();
Pattern pattern = Pattern.compile("[a-z]+");
Matcher matcher = pattern.matcher(str);
int k = 0;
while (k < length) {
if (matcher.find()) {
builder.append(matcher.group());
if (matcher.end() == length) {
// System.out.println("over");
break;
}
}
k++;
}
}
private void printCountInfo(Map<Character, Integer> map) {
if (!map.isEmpty()) {
Set<Entry<Character, Integer>> set = map.entrySet();
Iterator<Entry<Character, Integer>> iter = set.iterator();
while (iter.hasNext()) {
Entry<Character, Integer> entry = iter.next();
System.out.println(String.format("%c : %d", entry.getKey(),
entry.getValue()));
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] strArray = { "123456",// ,
"“ $@!-=)(&^%#@!",// ,
"asdfsewrewe",//
"ASDFDSFWEGSDFSD",//
"12324aasdfds",//
"12324ASDFDSFWEGSDFSD",//
"aasdfdsASDFDSFWEGSDFSD",//
"aasdfdsASDFDSFWEGSDFSD“ $@!-=)(&^%#@!",// 、
null,//
""// 0
};
CharCount charCount = new CharCount();
for (String str : strArray) {
System.out.println(String.format(" %s :", str));
charCount.count(str);
System.out.println("=================================");
}
}
}
실행 프로그램 출력 결과
123456 :
=================================
“ $@!-=)(&^%#@! :
=================================
asdfsewrewe :
: asdfsewrewe
a : 1
s : 2
d : 1
f : 1
e : 3
w : 2
r : 1
: a
=================================
ASDFDSFWEGSDFSD :
: asdfdsfwegsdfsd
a : 1
s : 4
d : 4
f : 3
w : 1
e : 1
g : 1
: a
=================================
12324aasdfds :
: aasdfds
a : 2
s : 2
d : 2
f : 1
: f
=================================
12324ASDFDSFWEGSDFSD :
: asdfdsfwegsdfsd
a : 1
s : 4
d : 4
f : 3
w : 1
e : 1
g : 1
: a
=================================
aasdfdsASDFDSFWEGSDFSD :
: aasdfdsasdfdsfwegsdfsd
a : 3
s : 6
d : 6
f : 4
w : 1
e : 1
g : 1
: w
=================================
aasdfdsASDFDSFWEGSDFSD“ $@!-=)(&^%#@! :
: aasdfdsasdfdsfwegsdfsd
a : 3
s : 6
d : 6
f : 4
w : 1
e : 1
g : 1
: w
=================================
null :
=================================
:
=================================
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.