본문 바로가기

알고리즘

<C++ 알고리즘> 부분 문자열 개수

입력으로 주어진 문자열에서 A 문자로 시작하고 B 문자로 끝나는 부분 문자열의 개수를 구하시오.

주어진 문자열: ADBABAWBA

 

총 6개

ADBABAWBA

ADBABAWBA

ADBABAWBA

ADBABAWBA

ADBABAWBA

ADBABAWBA

 

 

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool FindString(const vector<char>& string_vector, vector<char>::const_iterator where_first,
	vector<char>::const_iterator where_second, const char& first, const char& second, int& count)
{
	vector<char>::const_iterator first_find = find(where_first, string_vector.cend(), first);
	vector<char>::const_iterator second_find = find(where_second, string_vector.cend(), second);

	if (first_find == string_vector.cend())
		return true;

	if (second_find == string_vector.cend())
	{
		vector<char>::const_iterator FindNext = find(++first_find, string_vector.cend(), first);
		FindString(string_vector, FindNext, FindNext, first, second, count);
	}

	else
	{
		cout << *first_find << *second_find << endl;
		++count;
		FindString(string_vector, first_find, ++second_find, first, second, count);
	}
	
	return true;
}


int main()
{
	vector<char> string_vector;
	int count = 0;
	string_vector.push_back('A');
	string_vector.push_back('D');
	string_vector.push_back('B');
	string_vector.push_back('A');
	string_vector.push_back('A');
	string_vector.push_back('E');
	string_vector.push_back('D');
	string_vector.push_back('B');
	string_vector.push_back('A');

	FindString(string_vector, string_vector.begin(), string_vector.begin(), 'A', 'B', count);
	cout << count << endl;
	return 0;
}