問題文
C++
1文字列が与えられると、その中の最初の繰り返されない文字を見つけ、 2そのインデックスを返します。 存在しない場合は、-1を返します。 3文字列に小文字の英字のみが含まれていると想定する場合があります。
C++ で Time Limit Exceededがでます。
コードに無駄な繰り返しや助長なものがあるのでしょうか?
アドバイスをいただけないでしょうか?
私の書いた回答
C++
1class Solution { 2public: 3 int firstUniqChar(string s) { 4 5 int size=(int)(s.length()); 6 bool repeat; 7 8 for(int i=0;i<size;i++){ 9 10 repeat=false; 11 12 for(int j=0;j<size;j++){ 13 14 if(i!=j){ 15 if(s[i]==s[j]) 16 repeat=true; 17 } 18 } 19 if(repeat==false){ 20 return i; 21 } 22 } 23 return -1; 24// int nonRepeatedNum; 25// if(size==1){ 26// return 0; 27// }else if(size==0){ 28// return -1; 29// } 30 31// for(int i=0;i<=size;i++){ 32 33// repeat=false; 34// nonRepeatedNum=-1; 35 36// if(i!=size-1){ 37// //上り(要素数の小さい方から大きい方へと比較していく) 38// for(int j=i+1;j<size;j++){ 39// if(s[i]==s[j]){ 40// repeat=true; 41// } 42// } 43 44// //下り(要素数の大きい方から小さい方へと比較していく 45// if(i>0){ 46// for(int k=i-1;k>=0;k--){ 47 48// if(s[i]==s[k]){ 49// repeat=true; 50// } 51// } 52// } 53// //最後の文字から、要素数の小さい方へと比較していく 54// }else if(i==size-1){ 55// for(int m=size-2;m>=0;m--){ 56// if(s[i]==s[m]){ 57// //cout<<"last 1"<<endl; 58// repeat=true; 59// //最後の2文字を後ろから比較したから、 60// //iにsizeを 61// //代入して、ループを終わらせる 62// i=size; 63// } 64// } 65// } 66 67// if(nonRepeatedNum==-1 && repeat==false){ 68// //つまり、一つ目の、繰り返しのなかった数字 69// nonRepeatedNum=i; 70// break; 71// } 72// } 73 74// if(nonRepeatedNum==-1){ 75// return -1; 76// }else{ 77// return nonRepeatedNum; 78// } 79 } 80};
エラーになる時のテストケースです。長すぎるので省略してます。
C++
1"sdnvlbkrmtbollujsdjfjfppksravjkwwsimlmdtcmiilpjibjhcppluisqbqfwrjjlrapsmcwrsrnfrmtjrffpuuqwonqfjfqxellpvmcfmhxccljqlvboioelpfcawrxlwsajfaiehutvogduhobwgpogvatpbvoaognbepqnkhkjsvqmfaghavopppcjbjunuaeotpkbfsmeqikjflakgjexnqqgxnsdjolbjbvhr....
###LeetCodeというプログラミング問題サイトの問題です。
回答1件
あなたの回答
tips
プレビュー