Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 삭제를 통한 사전에서 가장 긴 단어

<시간/>

문자열과 문자열 사전이 있다고 가정하고 사전에서 주어진 문자열의 일부 문자를 삭제하여 구성할 수 있는 가장 긴 문자열을 찾아야 합니다. 가능한 결과가 둘 이상인 경우 사전순이 가장 작은 가장 긴 단어만 반환합니다. 결과가 없으면 빈 문자열을 반환합니다. 따라서 입력이 "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"]

    출력

    <사과