try_split_sequence.cc 648 B

12345678910111213141516171819202122
  1. #include "try_split_sequence.h"
  2. #include <vector>
  3. std::optional<std::pair<std::string_view, std::string_view>>
  4. TrySplitSequence(const std::string_view &sequence) {
  5. std::vector<size_t> a_keys;
  6. for (size_t i = 0; i < sequence.size(); ++i) {
  7. if (sequence[i] == 'A') {
  8. a_keys.push_back(i);
  9. }
  10. }
  11. if (a_keys.size() < 2) {
  12. return std::nullopt;
  13. }
  14. size_t midpoint = a_keys.size() / 2 - 1;
  15. return std::make_pair(std::string_view(&(sequence[0]), a_keys[midpoint]+1),
  16. std::string_view(&(sequence[a_keys[midpoint]+1]),
  17. sequence.size() - a_keys[midpoint]-1));
  18. }