여기서 우리는 한 가지 흥미로운 문제를 보게 될 것입니다. 문자열의 1 사이에 0이 있는지 확인해야 합니다. 그렇지 않으면 문자열이 유효하고 그렇지 않으면 유효하지 않습니다. 세 개의 문자열이 있다고 가정합니다 -
- 10001111010
- 00001111100
- 01111101111
이 세 문자열 중에서 1의 스트림 안에 0이 없기 때문에 B만 유효합니다.
이 문제를 해결하기 위해 우리는 문자열에 있는 처음 1의 인덱스를 찾고 마지막 1의 인덱스도 찾습니다. 그런 다음 이 두 인덱스에서 0이 있는지 확인하고, 그렇다면 false를 반환하고 그렇지 않으면 false를 반환합니다. 참(유효)
예시
#include <iostream> using namespace std; bool hasZeroInOnes(string str) { int first, last; for(first = 0; first < str.length(); first++){ if(str[first] == '1') break; } for(last = str.length() - 1; last >= 0; last--){ if(str[last] == '1') break; } for(int i = first+1; i < last; i++){ if(str[i] == '0') return false; } return true; } int main() { string str = "00001111100"; if(hasZeroInOnes(str)){ cout << str << " is a valid string"; } else { cout << str << " is NOT a valid string"; } }
출력
00001111100 is a valid string