문자열과 문자열 사전이 있다고 가정하고 사전에서 주어진 문자열의 일부 문자를 삭제하여 구성할 수 있는 가장 긴 문자열을 찾아야 합니다. 가능한 결과가 둘 이상인 경우 사전순이 가장 작은 가장 긴 단어만 반환합니다. 결과가 없으면 빈 문자열을 반환합니다. 따라서 입력이 "abpcplea"이고 d =["ale", "apple", "monkey", "plea"]와 같으면 결과는 "apple"이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- isSubsequence()라는 메서드를 정의합니다. s1과 s2가 필요합니다.
- j :=0
- 0부터 s1까지의 범위에 있는 i의 경우
- s2[j] =s1[i]이면 j를 1만큼 증가
- j =s2의 크기이면 루프를 끊습니다.
- j =s2의 크기인 경우 true를 반환
- 메인 방법에서 다음을 수행하십시오. -
- ans :=빈 문자열
- 0에서 d – 1까지의 범위에 있는 i의 경우
- x :=d[i]
- x의 크기> ans의 크기 또는 x의 크기 =ans의 크기 및 x
- isSubsequence(s, x)가 참이면 as :=x
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include네임스페이스 std;class Solution { public:bool isSubsequence(string s1, string s2){ int j =0; for(int i =0; i &d) { 문자열 ans =""; for(int i =0; i ans.size() || (x.size() ==ans.size() &&(x v ={"에일","사과","원숭이","항의"}; 솔루션 ob; cout <<(ob.findLongestWord("abpcplea", v));}
입력
"abpcplea"["ale","apple","monkey","plea"]