diff --git a/.gitignore b/.gitignore
index 348e7e4..1033eb9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -154,3 +154,9 @@ Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/5ccdb9c64312b2ee/16_REVERSEBITS.ipch
Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/969dd2cbf6a00d1b/16_REVERSEBITS.ipch
Alogrithm/.vs/Alogrithm/v16/TestStore/0/003.testlog
Alogrithm/Alogrithm/Debug/16_ReverseBits.obj
+Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/13d1a063a12e2911/17_WORDBREAK.ipch
+Alogrithm/Alogrithm/Debug/17_WordBreak.obj
+*.tlog
+*.coverage
+*.testlog
+*.ipch
diff --git a/Alogrithm/.vs/Alogrithm/v16/.suo b/Alogrithm/.vs/Alogrithm/v16/.suo
index 644a4f6..245c35e 100644
Binary files a/Alogrithm/.vs/Alogrithm/v16/.suo and b/Alogrithm/.vs/Alogrithm/v16/.suo differ
diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj b/Alogrithm/Alogrithm/Alogrithm.vcxproj
index e5c3a6e..0351099 100644
--- a/Alogrithm/Alogrithm/Alogrithm.vcxproj
+++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj
@@ -89,6 +89,7 @@
WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
false
$(IntDir)%(RelativeDir)
+ stdc11
Console
@@ -148,6 +149,7 @@
+
@@ -167,6 +169,7 @@
+
@@ -185,6 +188,7 @@
+
diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters
index 97af554..082749f 100644
--- a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters
+++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters
@@ -75,6 +75,9 @@
源文件\src
+
+ 源文件\src
+
@@ -125,6 +128,9 @@
头文件\include
+
+ 头文件\include
+
@@ -175,5 +181,8 @@
资源文件\config
+
+ 资源文件\config
+
\ No newline at end of file
diff --git a/Alogrithm/Alogrithm/config/17_WordBreak.ini b/Alogrithm/Alogrithm/config/17_WordBreak.ini
new file mode 100644
index 0000000..a68ed95
--- /dev/null
+++ b/Alogrithm/Alogrithm/config/17_WordBreak.ini
@@ -0,0 +1,16 @@
+[Test1]
+Input1=cppcode
+Input2=cpp,code
+Output=1
+[Test2]
+Input1=catsanddog
+Input2=cats,sand,dog
+Output=0
+[Test3]
+Input1=catsanddog
+Input2=cats,and,dog
+Output=1
+[Test4]
+Input1=catsanddog
+Input2=cats,and,dog
+Output=1
\ No newline at end of file
diff --git a/Alogrithm/Alogrithm/include/17_WordBreak.h b/Alogrithm/Alogrithm/include/17_WordBreak.h
new file mode 100644
index 0000000..d98e4f9
--- /dev/null
+++ b/Alogrithm/Alogrithm/include/17_WordBreak.h
@@ -0,0 +1,6 @@
+#pragma once
+#include
+#include
+#include
+
+bool WordBreak(char* s, char** wordDict, int wordDictSize);
\ No newline at end of file
diff --git a/Alogrithm/Alogrithm/src/17_WordBreak.cpp b/Alogrithm/Alogrithm/src/17_WordBreak.cpp
new file mode 100644
index 0000000..091b488
--- /dev/null
+++ b/Alogrithm/Alogrithm/src/17_WordBreak.cpp
@@ -0,0 +1,44 @@
+#include "../include/17_WordBreak.h"
+//ĿһǿַsһǿյбֵwordDict
+// жsǷԱոΪһֵгֵĵ
+//˼·ַsĵһַʼsǰword_lenֵַеԪرȽϣƥ䵽ͬģӦöλ1
+// ÿöλ1ǰȿһλǷΪҲΪ1Ϊ10һֱһַһַödp[s_len]
+bool WordBreak(char* s, char** wordDict, int wordDictSize) {
+ int s_len = strlen(s); // ȡsij
+ //쳣ж
+ if (wordDict == NULL || wordDictSize == 0 || s == NULL) {
+ return false;
+ }
+ // һdp飬ʾǰ±ʱǰĸǷ㱻ʼΪfalse
+ bool *dp = (bool *)malloc(sizeof(bool)*(s_len + 1));
+ memset(dp, false, sizeof(bool) * (s_len + 1));
+ dp[0] = true; // 0ҪʼΪtrue
+
+ // ӵһĸʼ
+ for (int i = 1; i <= s_len; i++) {
+ // ӵһʿʼ
+ for (int j = 0; j < wordDictSize; j++) {
+ // ȡǰȽϵĵʳ
+ int word_len = strlen(wordDict[j]);
+ // sǰλǰword_lenλÿʼworDictбȽǷ
+ int k = i - word_len; //kͬʱҲdp[]һε״̬
+ // k < 0ʾ˹ͷˣ϶
+ if (k < 0) {
+ continue;
+ }
+ // ǰiλú͵ǰȽϵwordDictȣôǰkλ֮ǰҲҪǰIJ㣬ʹڴk~iҲû
+ if (strncmp(s + k, wordDict[j], word_len) == 0) {
+ dp[i] = (dp[k] && dp[0]);
+ }
+ // iλˣҪٱȽϺworDictˣֱӱȽһiλü
+ if (dp[i] == 1) {
+ break;
+ }
+ }
+ }
+ for (int t = 0; t < s_len; t++)
+ printf("%d ", dp[t]);
+ // sһλǷз
+ return dp[s_len];
+
+}
diff --git a/Alogrithm/Alogrithm/src/main.cpp b/Alogrithm/Alogrithm/src/main.cpp
index 6fb3c89..906a4ae 100644
--- a/Alogrithm/Alogrithm/src/main.cpp
+++ b/Alogrithm/Alogrithm/src/main.cpp
@@ -1,9 +1,7 @@
#include
-#include "../include/16_ReverseBits.h"
int main()
{
- printf("%ld\n", ReverseBits(1));
return 0;
}
diff --git a/Alogrithm/UnitTest/UnitTest.cpp b/Alogrithm/UnitTest/UnitTest.cpp
index 8b0fe93..a81c013 100644
--- a/Alogrithm/UnitTest/UnitTest.cpp
+++ b/Alogrithm/UnitTest/UnitTest.cpp
@@ -18,6 +18,7 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework;
#define FileName_14 "../Alogrithm/config/14_SingleNumber.ini"
#define FileName_15 "../Alogrithm/config/15_WordPattern.ini"
#define FileName_16 "../Alogrithm/config/16_ReverseBits.ini"
+#define FileName_17 "../Alogrithm/config/17_WordBreak.ini"
namespace UnitTest
@@ -310,4 +311,26 @@ namespace UnitTest
}
}
};
+ TEST_CLASS(UnitTest_17)
+ {
+ TEST_METHOD(TestMethode1)
+ {
+ char Section_Name[100][10] = { 0 };
+ int Section_Count = CalcCount(100, Section_Name, FileName_17);
+ CString Input1, Input2,Output;
+ char Str_char[1024] = { 0 };
+ char *WordDic[100];
+ for (int i = 0; i < Section_Count; i++) {
+ GetPrivateProfileString(Section_Name[i], "Input1", " ", Input1.GetBuffer(200), 200, FileName_17);
+ GetPrivateProfileString(Section_Name[i], "Input2", " ", Input2.GetBuffer(500), 500, FileName_17);
+ GetPrivateProfileString(Section_Name[i], "Output", " ", Output.GetBuffer(20), 20, FileName_17);
+
+ strcpy(Str_char, Input1);
+ int Wordic_count = str_device3(Input2, WordDic);
+ bool nReal = WordBreak(Str_char, WordDic, Wordic_count);
+ Assert::AreEqual(nReal, CstrToBool(Output));
+ }
+
+ }
+ };
}
diff --git a/Alogrithm/UnitTest/UnitTest.vcxproj b/Alogrithm/UnitTest/UnitTest.vcxproj
index 1e9fecc..8699c55 100644
--- a/Alogrithm/UnitTest/UnitTest.vcxproj
+++ b/Alogrithm/UnitTest/UnitTest.vcxproj
@@ -103,7 +103,7 @@
Windows
$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)
DebugFull
- ../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;%(AdditionalDependencies)
+ ../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;../Alogrithm/Debug/17_WordBreak.obj;%(AdditionalDependencies)
diff --git a/Alogrithm/UnitTest/pch.cpp b/Alogrithm/UnitTest/pch.cpp
index 39c05ed..996e6c5 100644
--- a/Alogrithm/UnitTest/pch.cpp
+++ b/Alogrithm/UnitTest/pch.cpp
@@ -88,6 +88,24 @@ int str_device2(CString str, char(*return_str)[50])
}
return value_count; //返回数组首地址
}
+int str_device3(CString str, char* *return_str)
+{
+ int value_count = 0;
+ char* token; //存放被切割后的第一个子串
+ char Section_value[500] = { 0 };//存放nums转换成string类型的结果
+ memset(Section_value, 0, sizeof(char) * 500);
+ strcpy(Section_value, str);//将CString类型的字符串转换成char类型,方便后面切割字符串
+ //获得切割到的第一个字符串
+ token = strtok(Section_value, ",");
+ /* 继续获取其他的子字符串 */
+ while (token != NULL) {
+ return_str[value_count] = (char*)malloc(sizeof(char) * 100);
+ strcpy(return_str[value_count], token);
+ token = strtok(NULL, ",");
+ value_count++; //记录存了多少个元素
+ }
+ return value_count; //返回数组首地址
+}
//字符串转bool
bool CstrToBool(CString str)
{
diff --git a/Alogrithm/UnitTest/pch.h b/Alogrithm/UnitTest/pch.h
index 4c93404..6681e82 100644
--- a/Alogrithm/UnitTest/pch.h
+++ b/Alogrithm/UnitTest/pch.h
@@ -29,11 +29,13 @@
#include"../Alogrithm/include/14_SingleNumber.h"
#include"../Alogrithm/include/15_WordPattern.h"
#include"../Alogrithm/include/16_ReverseBits.h"
+#include"../Alogrithm/include/17_WordBreak.h"
int CalcCount(int n, char(*str)[10],const char *FileName);
int* str_device(CString str, int* value_count);
int str_device2(CString str, char(*return_str)[50]);
+int str_device3(CString str, char**return_str);
bool CstrToBool(CString str);