0
이 프로젝트에 대해 마지막으로 게시 한 프로젝트이므로 거의 완료되었지만 검색중인 하위 문자열의 크기를 늘려야하는 부분이 있습니다. 이것은 프로그램의 프롬프트입니다.OCAML 증가 검색 하위 문자열 크기
Description:
You are given a DNA sequence:
a string that contains only characters 'A', 'C', 'G', and 'T'.
Your task is to calculate the number of substrings of sequence,
in which each of the symbols appears the same number of times.
Example 1:
For sequence = "ACGTACGT", the output should be 6
All substrings of length 4 contain each symbol exactly once (+5),
and the whole sequence contains each symbol twice (+1).
Example 2:
For sequence = "AAACCGGTTT", the output should be 1
Only substring "AACCGGTT" satisfies the criterion above: it contains each symbol twice.
Input: String, a sequence that consists only of symbols 'A', 'C', 'G', and 'T'.
Length constraint: 0 < sequence.length < 100000.
이 내 code`
let countA = ref 0
let countC = ref 0
let countG = ref 0
let countT = ref 0
let subStricount = ref 0
let tempH = ref 0
let tempT = ref 3
let countChar x =
match x with
'A'-> countA := !countA +1;
| 'C' -> countC := !countC +1;
| 'T' -> countT := !countT +1;
| 'G' -> countG := !countG +1;
;;
let demoStri = read_line() in
let striL = String.length demoStri in
for i = 0 to striL -1 do
if !tempT < striL then
for j = !tempH to !tempT do
countChar demoStri.[j];
if (countA = countC) && (countC = countG) && (countG = countT) then subStricount := !subStricount +1;
done;
countA := 0;
countC := 0;
countG := 0;
countT := 0;
tempH := !tempH +1;
tempT := !tempT +1;
done;
if String.length demoStri > 4 then
for i = 0 to String.length demoStri - 1 do
countChar demoStri.[i];
done;
if (!countA > 0) && (countA = countC) && (countC = countG) && (countG = countT) then subStricount := !subStricount + 1;
print_int !subStricount; print_string "\n";
` 이 코드는 문자열의 입력을 계산 잘 실행하고, 예를 들어 ACGTACGT 그러나 그것은 단지 4의 문자열에서 검색되고, 6을 반환합니다 거기에 길이가 4 배열을 검색 한 후 문자열 자체 크기에 도달 할 때까지 크기를 늘리려면 코드 방법이 무엇입니까?
let tempH = ref 0
let tempT = ref 3
let striL = String.length demoStri in
. . .
if (!countA > 0) && (countA = countC) &&
(countC = countG) && (countG = countT) then
subStricount := !subStricount + 1;
를 그리고 두 개의 매개 변수의 함수로합니다 : demoStri
및 substrLen
그래도 부분 문자열 크기가 증가합니까? 나는 하위 문자열 크기를 늘려서 밑 부분의 루프에 대해 세 번째 비트를 제거 할 수 있지만 어려운 것은 무엇인지 알아 냈습니다. –
하위 문자열 길이에 의존하는 코드 부분을 찾아야합니다. 그것들은'substrLen' 매개 변수에 대신 의존합니다. 이것은 프로그래밍의 핵심입니다 (IMHO). 확실히 작동 할 것입니다. 모든 소프트웨어는 이런 종류의 추상화에 달려 있습니다 :-) –
나는 당신이 무슨 뜻인지 이해하지 못합니다. 그러나 나는 그것을 잠깐 넣으려고했는데, 지금은 잘못된 대답을주었습니다. while 루프 안에 모든 것을 넣고,! tempT