당신은 입력 문자열을 주어진 가정 해 k
자로 일반화합니다.<=으로 문자열을 트리밍이 개 문자
0
A
답변
1
나는 당신이 O(n)
시간에 자리에서이 작업을 수행 할 수 있다고 생각합니다. 문자열을 반복하면서 처리중인 단어의 시작 부분을 가리키는 포인터를 유지합니다. 단어의 길이가 k
보다 큰 경우 문자열의 시작 부분을이 단어로 덮어 씁니다. 다음은 C 코드입니다 (각 단어가 공백으로 분리되어 있다고 가정합니다).
void modify(char *s, int k){
int n = strlen(s);
int j = 0, cnt = 0, r = 0, prev = -1;
s[n++] = ' '; // Setinel to avoid special case
for(int i=0; i<n; i++){
if(s[i] == ' '){
if (cnt > k){
if(r > 0) s[r++] = ' ';
while(j < i) s[r++] = s[j++];
}
cnt = 0;
}
else {
if (prev == ' ') j = i;
cnt++;
}
prev = s[i];
}
s[r] = '\0';
}
int main(){
char s[] = "my name is vikas";
modify(s, 2);
printf("%s\n", s);
}
1
문자열의 현재 위치와 "현재 단어"를 유지하면서 현재 단어를 모두 길이> = k로 누적하고 축적 된 단어로 문자열을 재구성합니까?
이 알고리즘은 자리에서 재 작성 사용하고 요소 사이 매수 최소화 :
그런final int k = 2;
char[] test = " my name is el jenso ".toCharArray();
int l = test.length;
int pos = 0;
int cwPos = 0;
int copyPos = 0;
while (pos < l)
{
if (Character.isWhitespace(test[pos]))
{
int r = pos - cwPos;
if (r - 1 < k)
{
copyPos -= r;
cwPos = ++pos;
}
else
{
cwPos = ++pos;
test[copyPos++] = ' ';
}
}
else
{
test[copyPos++] = test[pos++];
}
}
System.out.println(new String(test, 0, copyPos));
0
뭔가 (내 생각, 시간 복잡도가 최적) 충분합니다 :
input
.Split(' ')
.Where(s => s.Length > k)
.Aggregate(new StringBuilder(), (sb, s) => sb.Append(s))
.ToString()
무엇 공간의 복잡성에 대해? O (k)에서 실행될 수 있습니다 (입력 및 출력의 크기를 계산할 수는 없습니다). Split은 실제 배열을 만들기 때문에 .NET에서는 그렇지 않습니다. 그러나 대신 반복자를 만들 수 있습니다. 문자열이 문자를 반복하는 것이라고 상상하면 O (1) 알고리즘이됩니다.
0
" "
에 의해 split()
및 if length() <= 2
1
"a short sentence of words" split ' ' filter {_.length > 2} mkString " "
(스칼라)를 생략
관련 문제
- 1. F # - 문자열을 <m>으로 전송 하시겠습니까?
- 2. 주변을 제거하기 위해 문자열을 나누기 < and > 문자
- 3. 보안 트리밍이 Web Forms Routing에서 작동합니까?
- 4. 카메라 소스가있는 UIImagePickerController : 비디오 트리밍이 작동하지 않습니다.
- 5. 어떻게 문자열을 OctetString (C#)으로 변환합니까?
- 6. C#으로 시리얼 포트로 전체 문자열을 읽기
- 7. C++ 문자열을 .NET String ^으로 변환하려면 어떻게해야합니까?
- 8. 어떻게 C#으로 프린터에 문자열을 인쇄합니까?
- 9. 파이썬에서 문자열을 "명령"으로 변환하려면 어떻게해야합니까?
- 10. C# XMLWriter + 금지 "/" "<" "<"문자
- 11. preg_replace()를 사용하여 일치하는 텍스트가 10 자보다 짧으면 대체하는 방법은 무엇입니까? <p>키워드는 10 개 이상의 문자 인 경우</p>으로
- 12. 문자열에서 특정 문자열을 제거하고 공백 다음 문자 다음 문자열을 제거합니다.
- 13. 내가 두 문자열을 가진 두 개의 문자열을 뺀 * 특별한 * 문자
- 14. 문자열을 찾아 다음과 같이 구축 내가 문자열을 가지고 지정된 문자
- 15. 문자열을 첫 번째 문자 (영문자 및 숫자)로 그룹화
- 16. 매칭 문자열 다음 문자 지정된 문자열을 다시
- 17. 문자열을 문자 그대로 파이썬에서 인쇄하는 방법
- 18. HTML 문자열을 확장하여 문자 엔티티 이름 지정
- 19. NULL 바이트가있는 C 문자열을 문자 배열로 바꿈
- 20. NumPy 문자 배열에 데이터 문자열을 쓰시겠습니까?
- 21. 임의 문자 문자열을 생성하는 좋은 방법입니까?
- 22. 문자열을 C++의 문자 배열로 분할
- 23. Java BitSet - 문자/문자열을 넣을 래퍼
- 24. Exif 데이터가 문자열을 반환합니까? 박스 문자 만
- 25. UITextField에서 문자열을 암호로 변환하는 방법 (문자 입력시)
- 26. 언제 문자 대신 문자열을 사용 하시겠습니까?
- 27. 문자 길이에 따라 문자열을 나누는 방법
- 28. 모든 브라우저 엔진에서 "\ <"를 "<" and "\>"으로 처리합니까?
- 29. '<'를 '<'으로 바꾸면 내 사이트가 XSS로부터 안전합니까?
- 30. List <> XML에 ICollection <>으로 내 보낸
가장 좋은 답변은 언어에 따라 다릅니다. 언어에 구애받지는 않습니다. – marcog
@Colin 숙제 태그를 추가하려면 질문을 편집하지 마십시오. 의심의 여지가 있다면, 그대로 두는 것이 가장 좋습니다. 대신, 묻는 사람이 상황을 명확하게 할 것을 요구하는 설명을 추가하십시오.] (http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) – marcog
@marcog : 감사합니다. 숙제 문제가 아닙니다. 이 질문은 제 포럼에 질문을 올렸을 때 주소 표시 줄에 링크를 만들기에 적합한 문자열을 자르므로 호기심 때문에 생각을 시작하기 때문에 질문. – Vikas