Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
1

Существуют ли в данной строке s две непересекающиеся подстроки "AB" и "BA"

09.10.2015, 15:44. Показов 2199. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть задача:

Дана строка s. Требуется определить, существуют ли в данной строке s две непересекающиеся подстроки "AB" и "BA" (подстроки могут идти в любом порядке).

Входные данные
На вход подаётся строка s длиной от 1 до 105 символов, состоящая из заглавных букв латинского алфавита.

Выходные данные
Выведите "YES" (без кавычек), если строка s содержит две непересекающиеся подстроки "AB" и "BA", и "NO" иначе.

Примеры тестов
входные данные
ABA
выходные данные
NO
входные данные
BACFAB
выходные данные
YES
входные данные
AXBYBXA
выходные данные
NO

Валится на 17 тесте в тестовой системе, что может быть не так, а то я уже не знаю че делать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
#include <set>
#include <map>
using namespace std;
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
 
    string s;
    cin >> s;
 
    int AB_begin, AB_end;
 
    int BA_begin, BA_end;
 
    bool flag_AB = false;
    bool flag_BA = false;
    for(int i=0; i<s.size()-2+1; i++)
    {
        if(s.substr(i,2) == "AB")
        {
            AB_begin = i;
            AB_end = i+1;
            flag_AB = true;
            break;
 
        }
 
        if(s.substr(i,2) == "BA")
        {
            BA_begin = i;
            BA_end = i+1;
            flag_BA = true;
            break;
 
        }
 
    }
 
    if(flag_AB == true)
    {
        for(int i=AB_end+1; i<s.size()-2+1; i++)
        {
            if(s.substr(i,2) == "BA")
            {
                flag_BA = true;
 
            }
        }
        goto point;
    }
 
    if(flag_BA == true)
    {
        for(int i=BA_end+1; i<s.size()-2+1; i++)
        {
            if(s.substr(i,2) == "AB")
            {
                flag_AB = true;
 
            }
        }
    }
 
    point :
    if(flag_AB == false || flag_BA == false)
        cout << "NO" ;
        else cout << "YES";
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2015, 15:44
Ответы с готовыми решениями:

Проверить, существуют ли две непересекающиеся и не соприкасающиеся нулевые квадратные подматрицы порядка два и выше
Помогите пожалуйста, завтра нужно сдать, а у меня и так дел по горло: Дана матрица A состоящая из m...

Разбить строку на непересекающиеся подстроки
вот условие задачи, второй день пытаюсь ее решить, но идей так и не появилось , подтолкните меня к...

Заменить в строке последнее вхождение данной подстроки на другую подстроку
Даны строки s,s1 и s2. Заменить в строке S последнее вхождение строки S1 на строку S2 через char

SQLite3 - Как найти ДВЕ подстроки в строке из базы?
Приветствую, всезнающий All ! Вопрос такой возник: есть заполненная база в SQLite3 и список из...

Поиск подстроки внутри данной строки, замена найденной подстроки на другую строку
Выполнить поиск подстроки внутри данной строки,замену найденной подстроки на другую строку Пример...

7
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
09.10.2015, 17:19 2
Может и не по существу вопроса, но
Цитата Сообщение от maksvolf96 Посмотреть сообщение
if(flag_AB == true)
означает, что Вы не понимаете, что такое логические переменные.
Замените на
C++
1
if(flag_AB)
1
202 / 138 / 88
Регистрация: 21.12.2014
Сообщений: 369
09.10.2015, 17:35 3
Цитата Сообщение от zss Посмотреть сообщение
if(flag_AB == true)
Цитата Сообщение от zss Посмотреть сообщение
if(flag_AB)
Какая разница?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
09.10.2015, 17:46 4
Цитата Сообщение от Redzep Посмотреть сообщение
Какая разница?
Такая же, как и в "Масло масляное"
0
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
09.10.2015, 17:48 5
и в конце
C++
1
 if(flag_AB == false || flag_BA == false)
на
C++
1
 if(!flag_AB || !flag_BA)


это я вообще не понял

C++
1
for(int i=AB_end+1; i<s.size()-2+1; i++)
Добавлено через 52 секунды
по хорошему, надо сеть и нормально написать код, не используя лишних библиотек.
И будет вам счастье
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
09.10.2015, 17:57 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(flag_AB)
    {
        for(int i=AB_end+1; i<s.size()-2+1; i++)
            if(s.substr(i,2) == "BA")
            {
                flag_BA = true;
                break;
             }
    }else
    if(flag_BA)
    {
        for(int i=BA_end+1; i<s.size()-2+1; i++)
            if(s.substr(i,2) == "AB")
            {
                flag_AB = true;
               break;
            }
    }
     if(flag_AB  && flag_BA)
        cout << "YES" ;
     else cout << "NO";
0
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
09.10.2015, 18:54  [ТС] 7
Всё то же самое - на 17 тесте, это то же самое, что переименовать переменную - результат будет тот же

Добавлено через 7 минут
даже так пробовал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
#include <set>
#include <map>
using namespace std;
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
 
    string s;
    cin >> s;
 
    int AB_end;
 
    int BA_end;
 
    bool flag_AB = false;
    bool flag_BA = false;
    for(int i=0; i<s.size()-2+1; i++)
    {
        if((s[i] =='A'  &&  s[i+1] == 'B'))
        {
            AB_end = i+1;
            flag_AB = true;
            break;
 
        }
 
        if(s[i] =='B'  &&  s[i+1] == 'A')
        {
            BA_end = i+1;
            flag_BA = true;
            break;
 
        }
 
    }
 
    if(flag_AB)
        {
            for(int i=AB_end+1; i<s.size()-2+1; i++)
                if(s[i] =='B'  &&  s[i+1] == 'A')
                {
                    flag_BA = true;
                    break;
                 }
        }else
        if(flag_BA)
        {
            for(int i=BA_end+1; i<s.size()-2+1; i++)
                if((s[i] =='A'  &&  s[i+1] == 'B'))
                {
                    flag_AB = true;
                   break;
                }
        }
         if(flag_AB  && flag_BA)
            cout << "YES" ;
         else cout << "NO";
 
}
0
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
09.10.2015, 18:57 8
напишу вам нормальный код, часа через 4, сейчас некогда

Добавлено через 52 секунды
у вас много лишнего, тут можно обойтись 20-30 строками.
0
09.10.2015, 18:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2015, 18:57
Помогаю со студенческими работами здесь

Даны две строки. Необходимо найти длину самой длинной подстроки, одинаковой в каждой строке
Даны две строки (s1 и s2). Необходимо найти длину самой длинной подстроки, одинаковой в каждой...

Заменить в данной строке все вхождения подстроки s на порядковый номер вхождения. Подстрока s вводится с клавиатуры.
И пожалуйста распишите что значат всякие там var,integer и т.д очень надо чтобы было подробно после...

Заменить в данной строке все вхождения подстроки S на порядковый номер вхождения. Подстрока S вводится с клавиатуры
Решил выложить свои лабораторные работы 1-10 за первый курс, первого семестра...

Заменить в данной строке все вхождения подстроки s на порядковый номер вхождения. Подстрока s вводится с клавиатуры
Заменить в данной строке все вхождения подстроки s на порядковый номер вхождения. Подстрока s...

Разбить область определения каждой из функций на две непересекающиеся области и вывести фрагменты графиков этих функций
3. Разбить область определения каждой из функций на две непересекающиеся области и вывести...

Какие существуют версии данной ОС?
Какие существуют версии Windows 7?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru