C#에서 Leetcode 문제 해결 - 가장 긴 해피 문자열
가장 긴 행복한 문자열
하위 문자열로 'aaa', 'bbb' 또는 'ccc' 문자열이 없으면 문자열을 happy라고 합니다.
세 개의 정수 a, b 및 c가 주어지면 다음 조건을 충족하는 문자열 s를 반환합니다.
예 1:
Input: a = 1, b = 1, c = 7
Output: "ccaccbcc"
Explanation: "ccbccacc" would also be a correct answer.
예 2:
Input: a = 2, b = 2, c = 1
Output: "aabbc"
예 3:
Input: a = 7, b = 1, c = 0
Output: "aabaa"
Explanation: It's the only correct answer in this case.
제약:
C#으로 답변:
public class Solution
{
public string LongestDiverseString(int a, int b, int c)
{
StringBuilder sb = new StringBuilder();
bool isHappy = true;
char? nextChar;
while (isHappy && (a > 0 || b > 0 || c > 0))
{
int len = sb.Length;
if (len >= 2)
{
nextChar = pickNextChar(sb[len - 1], sb[len - 2], a, b, c);
}
else if (len == 1)
{
nextChar = pickNextChar(sb[0], null, a, b, c);
}
else
{
nextChar = pickNextChar(null, null, a, b, c);
}
if (nextChar == null)
{
isHappy = false;
}
else
{
sb.Append(nextChar);
switch (nextChar)
{
case 'a':
a--;
break;
case 'b':
b--;
break;
case 'c':
c--;
break;
}
}
}
return sb.ToString();
}
private Char? pickNextChar(Char? last, Char? secondLast, int a, int b, int c)
{
if (last == null || secondLast == null || !last.Equals(secondLast))
{
// If we are looking for the first 2 chars of the string, or the last 2 chars are not equal,
// then we don't need to worry about string getting unhappy and can pick any of 'a', 'b' and 'c'.
if (a >= b && a >= c)
{
return 'a';
}
else if (b >= a && b >= c)
{
return 'b';
}
else
{
return 'c';
}
}
else
{
// If the last 2 chars are equal, we need to pick from the other 2 chars to avoid string getting unhappy
switch (last)
{
case 'a':
if (b >= c)
{
if (b > 0)
{ return 'b'; }
else
{
return null;
}
}
else if (c > 0)
{ return 'c'; }
else
{
return null;
}
case 'b':
if (a >= c)
{
if (a > 0)
{ return 'a'; }
else
{
return null;
}
}
else if (c > 0)
{ return 'c'; }
else
{
return null;
}
case 'c':
if (a >= b)
{
if (a > 0)
{ return 'a'; }
else
{
return null;
}
}
else if (b > 0)
{ return 'b'; }
else
{
return null;
}
default:
return null;
}
}
}
}
Reference
이 문제에 관하여(C#에서 Leetcode 문제 해결 - 가장 긴 해피 문자열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ssanjeevi/leet-code-problem-solving-in-c-longest-happy-string-b1b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)