給定兩個字串 s和t,每次可以任意交換s的奇數字或偶數字上的字元,即奇數字上的字元能與其他奇數字的字元互換,而偶數字上的字元能與其他偶數字的字元互換,問能否經過若干次交換,使s變成t。
樣例
給出 s=「abcd」,t=「cdab」,返回"yes"。
解釋:
第一次a與c交換,第二次b與d交換。
給出 s=「abcd」,t=「bcda」,返回"no"。
解釋:
無論如何交換,都無法得到bcda。
注意事項
字串長度均不超過100000100000
字串可由大寫字母、小寫字母及數字組成
解答過程:
第一次結果:中間錯誤
public
class
solution
if(s.
length()
!= t.
length()
)return
"no"
;char
char_s = s.
tochararray()
;char
char_t = t.
tochararray()
;boolean flag =
false
;for
(int i =
0; i< char_s.length ; i=i+2)
}if(flag ==
false
)else
}for
(int i =
1; i< char_s.length ; i=i+2)
}if(flag ==
false
)else
else}}
if(flag ==
true
)else
}/**
*主函式
*/public
static
void
main
(string[
] args)
}
雖然可以執行出結果,但是時間複雜度為o(n2);執行耗時6370ms。時間耗時太長了!!!
還發現其中的邏輯錯誤!當輸入"abad", "cbad"時候,輸出的結果還是會yes,這是不爭取的!!
為了提高效率,修改其中的業務邏輯
後期發現其中邏輯錯誤:修改後的**如下,通過!!
package test;
public
class
solution
if(s.
length()
!= t.
length()
)return
"no"
;char
char_s = s.
tochararray()
;char
char_t = t.
tochararray()
;boolean flag =
false
;for
(int i =
0; i< char_s.length ; i=i+2)
}if(char_s[i]
!= char_t[i])}
for(
int i =
1; i< char_s.length ; i=i+2)
}if(char_s[i]
!= char_t[i])}
return
"yes";}
public
static
void
main
(string[
] args)
}
修改後的邏輯總耗時772ms。
感悟:
JsonParser解析json字串雙引號問題
今天在專案 中使用到了jsonparser解析json字串為jsonarray或者jsonobject,解析之後使用 如下 獲取到的字串多了一層 雙引號 json字串格式如下 jsonobject jarray jsonparser.prase json getasjsonobject for st...
字串的排列(雙指標)
先給題 給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。示例1 輸入 s1 ab s2 eidbaooo 輸出 true 解釋 s2 包含 s1 的排列之一 ba 示例2 輸入 s1 ab s2 eidboaoo 輸出 ...
YOJ 字串的修改 雙版本
include include int main for y i 1 y版本二 include include int main char s 1000 char h 50 char c 50 scanf s s s s,h,c int i,j int ok 0 for i 0 i 版本二是偽替換,...