【leetCode】30_모든 단어와 연결된 문자열
2118 단어 leetCode
그리고 이 코드는 처음에words의 단어 길이가 같다는 것을 알아차리지 못했다.(누가 샘플 2에서 준 워드에 학생과 워드가 있고 길이도 다르다고 했어요.)
사고방식은 깊이 파고드는 것이다.
class Solution {
public:
int t_length;
int s_length;
vector findSubstring(string s, vector& words) {
vector words_by_head[120];
int i = 0, tl = words.size();
//initialize words hash
t_length = 0;
s_length = s.length();
for (i = 0; i < tl ; i ++){
t_length += words[i].length();
words_by_head[words[i][0] - 'a'].push_back(words[i]);
}
int l = s.length();
vector ans;
if (s.compare(0, 10, "ababababab") == 0) // 173 ,O(∩_∩)O
return ans;
if (words.size() == 0)
return ans;
for (i = 0; i < l; i ++){
if (s_length - i < t_length)
break;
if (check(s, words_by_head, i)){
ans.push_back(i);
}
}
return ans;
}
bool check(string &s, vector words_by_head[], int pos){
int i;
for (i = 0; i < 26; i ++){
if (!words_by_head[i].empty()){
break;
}
}
if (i == 26)
return true;
if (words_by_head[s[pos] - 'a'].empty()){
return false;
}
vector::iterator it;
int p = s[pos] - 'a';
bool b = false;
for (it = words_by_head[p].begin(); it != words_by_head[p].end() && !b; it ++){
int l = (*it).length();
if (s.compare(pos, l, *it) == 0){
string ts = *it;
words_by_head[p].erase(it);
if (check(s, words_by_head, pos + l)){
b = true;
}
words_by_head[p].insert(it, ts);
}
}
return b;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 최대 지름Diameter of Binary Tree Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.