깜짝 이 야!모 985 대학교 의 사람 leetcode 는 할 수 없 었 고 남 묵 녀 는 눈물 을 흘 렸 다.
52134 단어 leetcode
오늘 문 제 를 연 습 했 습 니 다. 문 제 는 어렵 지 않 지만 많은 사람들 이 쓸 수 없습니다. 큰 사람 이 몇 줄 을 다 썼 고 저도 쓸 수 없 기 때문에 블 로 그 를 쓸 필요 가 있 습 니 다.
제목: 1371. 모음 마다 짝수 의 최 장자 문자열 이 포함 되 어 있 습 니 다.
이것 은 제 가 처음으로 leetcode 를 쓴 것 입 니 다. 저 는 잘 모 르 겠 습 니 다. 다만 일부 변 수 는 클래스 밖 에 두 었 고 계속 컴 파일 했 지만 힘 들 었 습 니 다.나중에 나 는 이 문 제 를 발 견 했 지만 지나 갈 수 없 었 다. 그 이 유 는 시간 을 초 과 했 기 때문이다. ojs 는 하늘 을 돌파 할 정도 로 길 고 긴 문 자 를 주 었 다. 그리고 나의 불쌍 한 O (n ^ 2) 알고리즘 은 은하계 에서 느 려 졌 다.
times = {
'a': 1,
'e': 1,
'i': 1,
'o': 1,
'u': 1
};
yuanyin = "aeiou"
class Solution(object):
def findTheLongestSubstring(self, s):
lenth = len(s)
li = []
for i in range(lenth):
li.append([])
for j in range(lenth):
if s[j] in yuanyin:
times[s[j]] *= -1
for value in times.values():
li[j].append(value)
maxN = 0
N = 0
li.insert(0, [1, 1, 1, 1, 1])
le = len(li)
for k in range(le):
for l in range(le):
if li[k] == li[l]:
N = l - k
if N > maxN:
maxN = N
return maxN
s = input('S: ')
Word = Solution()
num = Word.findTheLongestSubstring(s)
print(num)
문자열 의 모든 위치의 모음 패 리 티 는 32 가지 밖 에 없 을 수 있 기 때문에 친구 가 나 에 게 시 계 를 하나 써 서 하 쉬 를 빨리 할 수 있다 고 알려 주 었 다.제 가 했 어 요.
class Solution(object):
def findTheLongestSubstring(self, s):
yuanyin = "aeiou"
biao = {
(1, 1, 1, 1, 1) :[-1, -1],
(-1, 1, 1, 1, 1) :[-1, -1],
(1, -1, 1, 1, 1) :[-1, -1],
(-1, -1, 1, 1, 1) :[-1, -1],
(1, 1, -1, 1, 1) :[-1, -1],
(-1, 1, -1, 1, 1) :[-1, -1],
(1, -1, -1, 1, 1) :[-1, -1],
(-1, -1, -1, 1, 1) :[-1, -1],
(1, 1, 1, -1, 1) :[-1, -1],
(-1, 1, 1, -1, 1) :[-1, -1],
(1, -1, 1, -1, 1) :[-1, -1],
(-1, -1, 1, -1, 1) :[-1, -1],
(1, 1, -1, -1, 1) :[-1, -1],
(-1, 1, -1, -1, 1) :[-1, -1],
(1, -1, -1, -1, 1) :[-1, -1],
(-1, -1, -1, -1, 1) :[-1, -1],
(1, 1, 1, 1, -1) :[-1, -1],
(-1, 1, 1, 1, -1) :[-1, -1],
(1, -1, 1, 1, -1) :[-1, -1],
(-1, -1, 1, 1, -1) :[-1, -1],
(1, 1, -1, 1, -1) :[-1, -1],
(-1, 1, -1, 1, -1) :[-1, -1],
(1, -1, -1, 1, -1) :[-1, -1],
(-1, -1, -1, 1, -1) :[-1, -1],
(1, 1, 1, -1, -1) :[-1, -1],
(-1, 1, 1, -1, -1) :[-1, -1],
(1, -1, 1, -1, -1) :[-1, -1],
(-1, -1, 1, -1, -1) :[-1, -1],
(1, 1, -1, -1, -1) :[-1, -1],
(-1, 1, -1, -1, -1) :[-1, -1],
(1, -1, -1, -1, -1) :[-1, -1],
(-1, -1, -1, -1, -1) :[-1, -1]
}
times = {
'a': 1,
'e': 1,
'i': 1,
'o': 1,
'u': 1
}
lenth = len(s)
for j in range(lenth):
li = []
if s[j] in yuanyin:
times[s[j]] *= -1
for value in times.values():
li.append(value)
li = tuple(li)
if biao[li][0] == -1 and li != (1, 1, 1, 1, 1):
biao[li][0] = j
else:
biao[li][1] = j
maxN = 0
N = 0
for value in biao.values():
N = value[1] - value[0]
if N > maxN:
maxN = N
return maxN
s = input('S: ')
Word = Solution()
num = Word.findTheLongestSubstring(s)
print(num)
그 중에서 가장 큰 문제 라 고 생각 합 니 다. 하 나 는 key (1, 1, 1, 1, 1) 를 처리 하 는 것 입 니 다. 이 상황 은 스 캔 테이프 가 이 문자열 로 이동 할 때 이 문자 와 이 문자 앞 에 있 는 a, e, i, o, u 의 패 리 티, 1 대표 패 리 티, - 1 대표 기 를 포함 합 니 다.그래서 우 리 는 (1, 1, 1, 1, 1) 의 value [0] = - 1 을 유지 해 야 한다. - 1 은 스 캔 테이프 가 0 번 째 문 자 를 스 캔 하지 않 았 을 때 (이해 하지 못 하면 스스로 예 를 들 어 생각해 볼 수 있다).
다 쓴 후에 제출 했 습 니 다. 지 났 습 니 다.
공식 적 인 답 을 보 자. 생각 은 비슷 하지만 코드 의 간결 정 도 는 크게 다르다.상태 압축 으로 11111 - > 31...
class Solution {
public:
int findTheLongestSubstring(string s) {
int ans = 0, status = 0, n = s.length();
vector<int> pos(1 << 5, -1);
pos[0] = 0;
for (int i = 0; i < n; ++i) {
if (s[i] == 'a') {
status ^= 1<<0;
} else if (s[i] == 'e') {
status ^= 1<<1;
} else if (s[i] == 'i') {
status ^= 1<<2;
} else if (s[i] == 'o') {
status ^= 1<<3;
} else if (s[i] == 'u') {
status ^= 1<<4;
}
if (~pos[status]) {
ans = max(ans, i + 1 - pos[status]);
} else {
pos[status] = i + 1;
}
}
return ans;
}
};
코드 를 보기 시 작 했 을 때 알 아 볼 수 없고 비트 연산 을 잘 배우 지 못 했 습 니 다. 많은 세부 사항 이 명확 하지 않 습 니 다 & (또한), | (또는), ^ (이상 또는), ~ (반대), 그 중에서 가장 현혹 되 는 것 은 ~ pos [status] 입 니 다. 마지막 으로 추 리 를 통 해 1 위 를 얻 었 습 니 다.양수 의 화 1 위 는 0 이 고, 반 을 취하 면 1 이다.
모 대 lao
class Solution:
def findTheLongestSubstring(self, s: str) -> int:
D = {"a": 1, "e": 2, "i": 4, "o": 8, "u": 16}
L = {0: 0}
m = t = 0
for i, c in enumerate(s, 1): # i 1
t ^= D.get(c, 0) # 0
m = max(m, i - L.setdefault(t, i))
return m
for enumerate
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
... print i, element
...
0 one
1 two
2 three
setdefault () 방법 은 한 줄 에서 이 일 을 완성 하 는 방식 을 제공 합 니 다.이 방법 에 전 달 된 첫 번 째 매개 변 수 는 검사 할 키 입 니 다.두 번 째 매개 변 수 는 이 키 가 존재 하지 않 을 때 설정 할 값 입 니 다.이 키 가 확실히 존재 한다 면 방법 은 키 의 값 을 되 돌려 줍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.