문자열 연결 절단
16745 단어 알고리즘
주어진 두 문자열 A, B 에 대해 서 는 문자열 A 가 첫 번 째 로 둘러싸 인 다음 에 특정한 위 치 를 선택 하여 자 르 고 시계 방향 이나 시계 반대 방향 으로 읽 으 며 B 문자열 과 같 으 면 A, B 는 쌍 생 어 라 고 합 니 다. 주어진 n 조 문자열 에 대해 서 는 쌍 생 어 를 사용 하 는 지 여 부 를 판단 합 니 다.
입력
1 2 helloworld worldhello
출력
Yeah
문제 풀이 의 사고 방향.
코드 구현
#include
#include
#include
#include
#include
#include
using namespace std;
bool IsTwinString(const string & str1,const string & str2)
{
if(str1==str2)
{
return 1;
}
string strTemp1 = str1;
reverse(strTemp1.begin(),strTemp1.end());
if(strTemp1==str2)
{
return 1;
}
string strTemp2 = str2;
sort(strTemp1.begin(),strTemp1.end());
sort(strTemp2.begin(),strTemp2.end());
if(strTemp1!=strTemp2)
{
return 0;
}
string strTemp3;
char ch = str2[0];
//
for(int i=1; i<str1.length()-1; i++)
{
//
if(str1[i-1]!=ch&&str1[i]!=ch)
{
continue;
}
strTemp1 = str1;
strTemp2 = strTemp1.substr(i);
strTemp1.erase(i,str1.length());
//
if(str1[i]==ch)
{
strTemp3 = strTemp2+strTemp1;
if(strTemp3==str2)
{
return 1;
}
}
//
if(str1[i-1]==ch)
{
reverse(strTemp2.begin(),strTemp2.end());
reverse(strTemp1.begin(),strTemp1.end());
strTemp3 = strTemp1+strTemp2;
if(strTemp3==str2)
{
return 1;
}
}
}
return 0;
}
int main()
{
int iTestNum;
int iStrNum;
cin>>iTestNum;
string strTemp;
vector<string> vStr;
while(iTestNum--)
{
cin>>iStrNum;
vStr.clear();
for(int i=0; i<iStrNum; i++)
{
cin>>strTemp;
vStr.push_back(strTemp);
}
bool bHasFind = 0;
for(int i=0; i<iStrNum-1; i++)
{
for(int j=i+1; j<iStrNum; j++)
{
if(vStr[i].length()==vStr[j].length()&&IsTwinString(vStr[i],vStr[j]))
{
bHasFind = 1;
break;
}
}
if(bHasFind)
{
break;
}
}
if(bHasFind)
{
cout<<"Yeah"<<endl;
}
else
{
cout<<"Sad"<<endl;
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.